Objective-C эквивалент кода в С#

Как написать эквивалентный код в С#:

typedef void (^MethodBlock)(int); 

- (void) fooWithBlock:(MethodBlock)block
{
    int a = 5;
    block(a);
}

- (void) regularFoo
{
    [self fooWithBlock:^(int val) 
    {
        NSLog(@"%d", val);
    }];
}

Ответы

Ответ 1

Что-то вроде этого:

void Foo(Action<int> m)
{
    int a = 5;
    m(a);
}

void RegularFoo()
{
    Foo(val => // Or: Foo(delegate(int val)
    {
        Console.WriteLine(val);
    });
}

Action<T> - это делегат, который принимает ровно один аргумент указанного вами типа (в данном случае, int), который выполняется, не возвращая ничего. Также см. Общую ссылку С# делегата.

Для простого случая, подобного этому, это довольно просто. Тем не менее, я считаю, что существуют некоторые семантические/технические различия между блоками в Objective-C и делегатами в С#, которые, вероятно, выходят за рамки этого вопроса.

Ответ 2

void fooWithBlock(Action<int> block)
{
   int a = 5;
   block(a);
}