首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用匿名方法返回值?

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

Stack Overflow用户
提问于 2012-05-10 01:12:57
回答 6查看 106.1K关注 0票数 95

此操作失败

代码语言:javascript
复制
string temp = () => {return "test";};

带着错误

无法将lambda表达式转换为类型“string”,因为它不是委托类型

这个错误是什么意思,我如何解决它?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-05-10 01:14:20

这里的问题是,您定义了一个匿名方法,该方法返回一个string,但试图将其直接分配给一个string。它是一个表达式,当它被调用时会产生一个string,它不是一个直接的string。需要将其分配给兼容的委托类型。在这种情况下,最简单的选择是Func<string>

代码语言:javascript
复制
Func<string> temp = () => {return "test";};

这可以通过转换或使用委托构造函数在一行代码中建立lambda的类型,然后调用来完成。

代码语言:javascript
复制
string temp = ((Func<string>)(() => { return "test"; }))();
string temp = new Func<string>(() => { return "test"; })();

注意:两个样本都可以简称为缺少{ return ... }的表达形式

代码语言:javascript
复制
Func<string> temp = () => "test";
string temp = ((Func<string>)(() => "test"))();
string temp = new Func<string>(() => "test")();
票数 141
EN

Stack Overflow用户

发布于 2012-05-10 01:15:45

您正在尝试将函数委托分配给字符串类型。试试这个:

代码语言:javascript
复制
Func<string> temp = () => {return "test";};

您现在可以按如下方式执行函数:

代码语言:javascript
复制
string s = temp();

"s“变量现在将具有值"test”。

票数 18
EN

Stack Overflow用户

发布于 2013-06-05 12:05:45

使用一些辅助函数和泛型,您可以让编译器推断类型,并将其缩短一点:

代码语言:javascript
复制
public static TOut FuncInvoke<TOut>(Func<TOut> func)
{
    return func();
}

var temp = FuncInvoke(()=>"test");

附注:这也很好,因为你可以返回一个匿名类型:

代码语言:javascript
复制
var temp = FuncInvoke(()=>new {foo=1,bar=2});
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10520892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档