C#中的Objective-C代码块等效

时间:2011-04-28 19:15:01

标签: c# objective-c objective-c-blocks lambda

我如何在C#中编写等效代码:

typedef void (^MethodBlock)(int); 

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

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

2 个答案:

答案 0 :(得分:16)

这样的事情:

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# delegate reference

对于像这样的简单案例,它非常简单。但是,我认为Objective-C中的块与C#中的委托之间存在一些语义/技术差异,这可能超出了这个问题的范围。

答案 1 :(得分:1)

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