**
указатель на указатель.
Это могла бы быть матрица (массив массивов) или массив строк (char
массив), и т.д.
Проще говоря, вы можете просто использовать лямбда:
public void DoSomething(Func<int, int, int> op)
{
Console.WriteLine(op(5, 2));
}
DoSomething((x, y) => x + y);
DoSomething((x, y) => x * y);
// etc
Это не очень интересно. Было бы хорошо, если бы все эти делегаты были подготовлены для нас. Конечно, вы можете сделать это с помощью статического класса:
public static class Operator<T>
{
public static readonly Func<T, T, T> Plus;
public static readonly Func<T, T, T> Minus;
// etc
static Operator()
{
// Build the delegates using expression trees, probably
}
}
Действительно, Марк Гравелл сделал нечто очень похожее в MiscUtil , если хотите. Затем вы можете позвонить:
DoSomething(Operator<int>.Plus);
Это не совсем красиво, но, как мне кажется, это наиболее близкий вариант, поддерживаемый на данный момент.
Боюсь, я действительно не понимаю материал Ruby, поэтому не могу комментировать что ...
Следующее является прямым, буквальным (насколько это возможно) переводом C #:
(Func<int>)(x => x * x)(
Enumerable.Range(1, 100)
.Where(x => x % 2 == 1)
.Aggregate((x, y) => x + y))
В частности:
{||}
- становятся лямбдами: =>
select
становится Где
вводить
становится Агрегат
в
становится прямым вызовом экземпляра лямбды