Как Вы объявляете встроенного Делегата Предиката?

Вот работающая и эффективная функция массива Shisherle Fisher-Yates:

private static void shuffleArray(int[] array)
{
    int index;
    Random random = new Random();
    for (int i = array.length - 1; i > 0; i--)
    {
        index = random.nextInt(i + 1);
        if (index != i)
        {
            array[index] ^= array[i];
            array[i] ^= array[index];
            array[index] ^= array[i];
        }
    }
}

или

private static void shuffleArray(int[] array)
{
    int index, temp;
    Random random = new Random();
    for (int i = array.length - 1; i > 0; i--)
    {
        index = random.nextInt(i + 1);
        temp = array[index];
        array[index] = array[i];
        array[i] = temp;
    }
}
41
задан aku 13 September 2008 в 01:47
поделиться

3 ответа

Существует две опции, явный делегат или делегат, замаскированный как конструкция lamba:

явный делегат

myObjects.RemoveAll(delegate (MyObject m) { return m.X >= 10; });

лямбда

myObjects.RemoveAll(m => m.X >= 10);
<час>

Дополнение:

Производительность, мудрая, оба равны. На самом деле, обе конструкции языка генерируют тот же IL, когда скомпилировано. Это вызвано тем, что C# 3.0 является в основном расширением на C# 2.0, таким образом, это компилирует в конструкции C# 2.0:)

53
ответ дан Erik van Brakel 23 September 2019 в 15:21
поделиться
  //C# 2.0
  RemoveAll(delegate(Foo o){ return o.X >= 10; });

или

  //C# 3.0
  RemoveAll(o => o.X >= 10);

или

  Predicate<Foo> matches = delegate(Foo o){ return o.X >= 10; });
  //or Predicate<Foo> matches = o => o.X >= 10;
  RemoveAll(matches);
10
ответ дан Mark Cidade 23 September 2019 в 15:21
поделиться

Лямбда путь C# 3.0:

myObjects.RemoveAll(m => m.x >= 10);

анонимный делегат путь C# 2.0:

myObjects.RemoveAll(delegate (MyObject m) {
   return m.x >= 10;
});

И, для парней VB, лямбда путь VB 9.0:

myObjects.RemoveAll(Function(m) m.x >= 10)

, К сожалению, VB не поддерживает анонимного делегата.

15
ответ дан Mark Brackett 23 September 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: