C#如何在方法参数列表中声明lambda或匿名函数类型?

C#如何在方法参数列表中声明lambda或匿名函数类型?,c#,C#,我不知道这在C#中是否可行。但我想做的是: 一个接口,它声明了一个具有完成块/回调/lambda/任何您想要调用的方法。看起来很简单。但是,这里是第一次尝试: namespace N { interface MyInterface { delegate void CompletionBlock(); void doSomething(CompletionBlock completionBlock); } } 但是接口不能声明委托。好的,这个怎么样 namespace N

我不知道这在C#中是否可行。但我想做的是: 一个接口,它声明了一个具有完成块/回调/lambda/任何您想要调用的方法。看起来很简单。但是,这里是第一次尝试:

namespace N {
  interface MyInterface {
    delegate void CompletionBlock();
    void doSomething(CompletionBlock completionBlock);
  }
}
但是接口不能声明委托。好的,这个怎么样

namespace N {
  public delegate void CompletionBlock();
  interface MyInterface {
    void doSomething(CompletionBlock completionBlock);
  }
}
当然可以,但是现在,假设我声明另一种类型的CompletionBlock,它以一个参数为例。我无法调用类型CompletionBlock,因为如果它位于同一命名空间内,则会与上述类型冲突

然后是Action和Func。但即使是动作也需要一个参数,我不需要参数。因此,采取行动似乎不是一个可行的候选人。实际上,我想要的是一种内联“匿名块”概念的方法,只要签名是void(void)

namespace N {
  interface MyInterface {
    void doSomething(typeof(()=>) completionBlock);
  }
}
但是lambdas实际上没有C#中的类型。它们至少有签名吗? 基本上,有办法解决这个问题吗

例如,在Objective-C中,块属于NSBlock类型,尽管它们的签名本身不容易访问,但可以创建一个方法来获取具有特定签名的块。例如:

- (void)doSomething:(void(^)(void))completionBlock
[obj doSomething:^(){your block code}];
将是一个方法,它接受一个没有参数和返回类型的块,您可以这样调用该方法,例如:

- (void)doSomething:(void(^)(void))completionBlock
[obj doSomething:^(){your block code}];
使用或他们的兄弟姐妹之一,或仅在您的情况下使用

Action
在as
Func
do的位置不返回任何内容

还有Action和Func。但即使Action也有一个参数,我不需要参数。所以Action看起来不是一个可行的候选者

如果使用
操作
(而不是
操作
),则它不接受参数

namespace N {
  interface MyInterface {
    void doSomething(Action completionBlock);
  }  
}
这允许您编写:

yourInstance.doSomething(() => DoWhatever(foo));
或者,如果
DoWhatever
void DoWhatever()
,只需:

yourInstance.doSomething(DoWhatever);
有一个。你可以用吗?