如何使用匿名方法返回值?

这失败了

string temp = () => {return "test";}; 

与错误

无法将lambdaexpression式转换为“string”types,因为它不是委托types

错误意味着什么,我该如何解决?

这里的问题是,你已经定义了一个匿名方法,它返回一个string但试图直接把它分配给一个string 。 这是一个expression式,当被调用产生一个string它不是直接的string 。 它需要分配给一个兼容的委托types。 在这种情况下,最简单的select是Func<string>

 Func<string> temp = () => {return "test";}; 

这可以通过一点点转换或使用委托构造函数来build立lambda的types,然后调用。

 string temp = ((Func<string>)(() => { return "test"; }))(); string temp = new Func<string>(() => { return "test"; })(); 

注意:两个样本都可以缩写为缺less{ return ... }的expression式

 Func<string> temp = () => "test"; string temp = ((Func<string>)(() => "test"))(); string temp = new Func<string>(() => "test")(); 

您正试图将一个函数委托分配给一个stringtypes。 尝试这个:

 Func<string> temp = () => {return "test";}; 

您现在可以执行该function:

 string s = temp(); 

“s”variables现在将具有“test”的值。

使用一个小的帮助函数和generics,你可以让编译器推断这个types,并缩短一点:

 public static TOut FuncInvoke<TOut>(Func<TOut> func) { return func(); } var temp = FuncInvoke(()=>"test"); 

附注:这也是很好的,你可以返回一个匿名types:

 var temp = FuncInvoke(()=>new {foo=1,bar=2}); 

你可以使用带有参数的匿名方法:

 int arg = 5; string temp = ((Func<int, string>)((a) => { return a == 5 ? "correct" : "not correct"; }))(arg);