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

发布于 2024-11-03 22:35:23 字数 259 浏览 0 评论 0原文

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

typedef void (^MethodBlock)(int); 

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

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

How would I write the equivalent code in C#:

typedef void (^MethodBlock)(int); 

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凡尘雨 2024-11-10 22:35:23

像这样的东西:

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

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

Action是一个委托,它需要恰好有一个您指定的类型的参数(在本例中为 int),该参数执行时不会返回任何内容。另请参阅常规 C# 委托参考

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

Something like this:

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

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

Action<T> is a delegate that takes exactly one argument of a type you specify (in this case, int), that executes without returning anything. Also see the general C# delegate reference.

For a simple case like this, it's pretty straightforward. However, I believe there are some semantic/technical differences between blocks in Objective-C and delegates in C#, which are probably beyond the scope of this question.

◇流星雨 2024-11-10 22:35:23
void fooWithBlock(Action<int> block)
{
   int a = 5;
   block(a);
}
void fooWithBlock(Action<int> block)
{
   int a = 5;
   block(a);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文