如何使用 ??用lambda表达?

时间:2019-01-24 05:08:38

标签: c#

我们可以使用??和lambda表达式简化以下内容吗?

Func<int, int> func = f; // f is a function parameter 
if (func == null) // if f passed by the user is null then we use the default identity function f(x)=x.
    func = x => x;

我无法做某事Func<int, int> func = f ?? x=>x;。可以吗?

编辑

我的情况如下。

class Program
{
    static double Average(int[] data, Func<int, int> f = null)
    {
        int sum = 0;
        Func<int, int> func = f ?? new Func<int, int>(x => x);
        //Func<int, int> func = f;
        //if (func == null)
        //    func = x => x;
        foreach (int x in data)
            sum += func(x);

        return (double)sum / data.Length;
    }
    static void Main(string[] args)
    {
        int[] data = { 1, 2, 3 };
        Console.WriteLine(Average(data));
    }
}

2 个答案:

答案 0 :(得分:1)

null-coalescing运算符的优先级高于lambda声明。

Func<int, int> func = f ?? (x => x);

答案 1 :(得分:1)

可能的Null-coalescing operator and lambda expression副本

这应该有效

Func<int, int> func = f ?? (x=>x);

您的语句被解析为

Func<int, int> func = (f ?? x)=>x;

请先搜索可用的答案,以检查是否有人已经回答了。