c# - 无法将方法组 '' 转换为非委托(delegate)类型 'System.Delegate'。您是否打算调用该方法?

标签 c# delegates

我正在尝试将函数引用存储在委托(delegate)类型中以备后用。

这是我正在做的:

class Program
{
    static void Test()
    {

    }

    static void Main(string[] args)
    {
        Delegate t= (Delegate)Test;
    }
}

在此我遇到以下错误:

Cannot convert method group 'Test' to non-delegate type 'System.Delegate'.
Did you intend to invoke the method?

为什么会这样?

最佳答案

您真的不应该使用 Delegate 类型来存储委托(delegate)。您应该使用特定类型的委托(delegate)。

在几乎所有情况下,您都可以使用ActionFunc 作为您的委托(delegate)类型。在这种情况下,Action 是合适的:

class Program
{
    static void Test()
    {

    }

    static void Main(string[] args)
    {
        Action action = Test;

        action();
    }
}

从技术上讲,您可以通过执行以下操作来获取 Delegate 的实例:

Delegate d = (Action)Test;

但实际使用 Delegate 与实际特定类型的委托(delegate)(例如 Action)相反,会很困难,因为编译器将不再知道该方法的签名是,所以它不知道应该向它传递什么参数。

关于c# - 无法将方法组 '' 转换为非委托(delegate)类型 'System.Delegate'。您是否打算调用该方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15204639/

相关文章:

c# - 这行 C# 代码实际上做了什么?

c# - Dotnet nuke 代码隐藏事件未执行

c# - 如何在asp :BoundField?中将日期时间更改为本地GMT日期时间

vb.net - 委托(delegate)和地址

ruby-on-rails - 将方法委托(delegate)给 ApplicationHelper 中具有相同名称的类方法

ios - 复杂的多线程应用程序的最佳网络解决方案是什么?

c# - 如何从基类的实例初始化派生类的实例?

c# - 是否可以向 App_Code 添加两种语言代码文件,即 C# 和 VB.NET?如果是这样,我怎么能做到这一点?

c# - 无法创建抽象类的实例 - 来自文档

c# - 将委托(delegate)引用传递给另一个类以便一个订阅者可以监听多个发布者?