此操作失败
string temp = () => {return "test";};
带着错误
无法将lambda表达式转换为类型“string”,因为它不是委托类型
这个错误是什么意思,我如何解决它?
发布于 2012-05-10 01:14:20
这里的问题是,您定义了一个匿名方法,该方法返回一个string
,但试图将其直接分配给一个string
。它是一个表达式,当它被调用时会产生一个string
,它不是一个直接的string
。需要将其分配给兼容的委托类型。在这种情况下,最简单的选择是Func<string>
Func<string> temp = () => {return "test";};
这可以通过转换或使用委托构造函数在一行代码中建立lambda的类型,然后调用来完成。
string temp = ((Func<string>)(() => { return "test"; }))();
string temp = new Func<string>(() => { return "test"; })();
注意:两个样本都可以简称为缺少{ return ... }
的表达形式
Func<string> temp = () => "test";
string temp = ((Func<string>)(() => "test"))();
string temp = new Func<string>(() => "test")();
发布于 2012-05-10 01:15:45
您正在尝试将函数委托分配给字符串类型。试试这个:
Func<string> temp = () => {return "test";};
您现在可以按如下方式执行函数:
string s = temp();
"s“变量现在将具有值"test”。
发布于 2013-06-05 12:05:45
使用一些辅助函数和泛型,您可以让编译器推断类型,并将其缩短一点:
public static TOut FuncInvoke<TOut>(Func<TOut> func)
{
return func();
}
var temp = FuncInvoke(()=>"test");
附注:这也很好,因为你可以返回一个匿名类型:
var temp = FuncInvoke(()=>new {foo=1,bar=2});
https://stackoverflow.com/questions/10520892
复制相似问题