と間違っている何ちょうど私がミックスに構築本の別の興味深い使用を投げるだろうと思って:
namespace FunWithContractsAndAnonymousDelegates
{
using System;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
using System.Linq;
internal static class Program
{
private static void MySort<T>(T[] array, int index, int length, IComparer<T> comparer)
{
Contract.Requires<ArgumentNullException>(array != null);
Contract.Requires<ArgumentOutOfRangeException>(index >= 0 && index <= array.Length);
Contract.Requires<ArgumentOutOfRangeException>(length >= 0 && index + length <= array.Length);
Contract.Ensures(new Func<T[], int, int, IComparer<T>, bool>((_array, _index, _length, _comparer) =>
{
T[] temp = (T[])_array.Clone();
Array.Sort(temp, _index, _length, _comparer);
return temp.SequenceEqual(_array);
})(array, index, length, comparer));
// TODO: Replace with my heavily optimized and parallelized sort implementation...
Array.Sort(array, index, length, comparer);
}
private static void Main(string[] args)
{
int[] array = { 3, 2, 6, 1, 5, 0, 4, 7, 9, 8 };
MySort(array, 0, array.Length, Comparer<int>.Default);
foreach (int value in array)
{
Console.WriteLine(value);
}
}
}
}
匿名デリゲートを宣言し、呼び出すには、私が持っていないことを意味し事後条件をチェックするために(つまりContract.Ensuresの呼び出しで)一度だけ使用するメソッドを宣言します。 「もちろん、本当の問題は、なぜ...か」これは私が今日の現実のためにこれを使用し、見ても同じくらい不自然
...
:私は匿名メソッド内でより多くのをやりたいだけのものより一つの声明。 – sipwiz
おそらくメソッドへのリファクタリング...またはあなたが幸せであれば何でも。 –