相关疑难解决方法(0)

在值类型上定义的扩展方法不能用于创建委托 - 为什么不呢?

可以将扩展方法分配给与对象的用法匹配的委托,如下所示:

static class FunnyExtension {
    public static string Double(this string str) { return str + str; }
    public static int Double(this int num) { return num + num; }
}


Func<string> aaMaker = "a".Double;
Func<string, string> doubler = FunnyExtension.Double;

Console.WriteLine(aaMaker());       //Prints "aa"
Console.WriteLine(doubler("b"));    //Prints "bb"
Run Code Online (Sandbox Code Playgroud)

如果他们扩展的类型是值类型,它将不起作用:

Func<int> eightMaker = 4.Double;    //Error CS1113: Extension methods 'FunnyExtension.Double(int)' defined on value type 'int' cannot be used to create delegates
Func<int, int> intDoubler = FunnyExtension.Double;  //Works
Run Code Online (Sandbox Code Playgroud)

这给了

错误CS1113:在值类型"int"上定义的扩展方法'FunnyExtension.Double(int)'不能用于创建委托.

他们为什么不能?

.net c# extension-methods delegates value-type

31
推荐指数
1
解决办法
6617
查看次数

标签 统计

.net ×1

c# ×1

delegates ×1

extension-methods ×1

value-type ×1