C# 无法隐式转换类型';int';至';Foo.Bar.Delegates.Program.ParseIntDelegate';

C# 无法隐式转换类型';int';至';Foo.Bar.Delegates.Program.ParseIntDelegate';,c#,delegates,C#,Delegates,我正在努力学习C#delegations。编译这段代码时,我在主题行收到此错误消息 无法将类型“int”隐式转换为“Foo.Bar.Delegates.Program.ParseIntDelegate” 所以我被困在这里,直到我明白我做错了什么。如果有人能帮我解决这个问题,我将非常感激 首先,您的代理类型应为: private delegate int ParseIntDelegate(string str); 委托类型应与要转换的方法的签名匹配。在本例中,Parse接受一个string参数并

我正在努力学习C#delegations。编译这段代码时,我在主题行收到此错误消息

无法将类型“int”隐式转换为“Foo.Bar.Delegates.Program.ParseIntDelegate”


所以我被困在这里,直到我明白我做错了什么。如果有人能帮我解决这个问题,我将非常感激

首先,您的代理类型应为:

private delegate int ParseIntDelegate(string str);
委托类型应与要转换的方法的签名匹配。在本例中,
Parse
接受一个
string
参数并返回一个
int

由于您的
Parse
方法具有兼容的签名,因此您可以直接从该签名创建新的委托实例:

ParseIntDelegate firstParseIntMethod = Parse;
然后您可以像调用普通方法应用程序一样调用它:

Console.WriteLine("Integer is {0}", firstParseIntMethod(x));

有几件事突然向我袭来:

在Main()中,您有

ParseIntDelegate firstParseIntMethod = Parse(x);
这将尝试将Parse(x)的结果存储到firstParseIntMethod中。您在这里调用的是Parse,而不是引用它

您可以通过删除参数来解决此问题:

ParseIntDelegate firstParseIntMethod = Parse ; 
现在您将遇到一个不同的错误,抱怨Parse的签名

private delegate int ParseIntDelegate();

private static int Parse(string x)

Parse无法“适应”ParseIntDelegate,因为它需要字符串参数。您可以将ParseIntDelegate更改为使用字符串来解决问题

是的,首先引用,然后调用并获得匹配的签名。谢谢各位。很高兴能帮上忙——如果这对你们有用的话,你们可以把李的回答标记为解决了你们的问题。我有一个类似的问题,我把()和我的作业结束了,直到来到这里才看到它。
private delegate int ParseIntDelegate();

private static int Parse(string x)