我们可以使用??
和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));
}
}
答案 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;
请先搜索可用的答案,以检查是否有人已经回答了。