如何使用匿名方法的返回值?(How to return value with anonymous m

2019-06-24 07:16发布

这种失败

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

与错误

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

什么是错误的意思是,我该如何解决呢?

Answer 1:

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

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

这可以在一个由行有点铸造或使用委托构造函数建立拉姆达随后调用的类型来完成。

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")();


Answer 2:

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

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

您现在可以正是如此执行的功能:

string s = temp();

在“S”变量现在的值为“测试”。



Answer 3:

使用小帮手功能,仿制药可以让编译器推断出类型,并缩短它一点点:

public static TOut FuncInvoke<TOut>(Func<TOut> func)
{
    return func();
}

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

附注:这个也不错,你再能返回一个匿名类型:

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


Answer 4:

您可以使用匿名方法与参数:

int arg = 5;

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


Answer 5:

匿名方法可以返回使用FUNC代表的值。 这里是我已经展示了如何返回使用匿名方法的值的例子。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {


        static void Main(string[] args)
        {
            Func<int, int> del = delegate (int x)
              {
                  return x * x;

              };

            int p= del(4);
            Console.WriteLine(p);
            Console.ReadLine();
        }
    }
}


文章来源: How to return value with anonymous method?
标签: c# .net lambda