在C#中的Objective-C代碼塊等效




objective-c-blocks lambda (2)

我將如何寫在C#中的等效代碼:

typedef void (^MethodBlock)(int); 

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

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

像這樣的東西:

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 ),該參數執行時不返回任何內容。 另請參閱一般的C#委託參考

對於這樣一個簡單的例子,這是非常簡單的。 不過,我相信在Objective-C和C#中的代表之間存在一些語義/技術差異,這可能超出了這個問題的範圍。


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




lambda