C# 如何在C语言中的“查询表达式”的“选择”标记中使用“lambda表达式”#
我想在C# 如何在C语言中的“查询表达式”的“选择”标记中使用“lambda表达式”#,c#,linq,select,lambda,capture,C#,Linq,Select,Lambda,Capture,我想在select标记中使用lambda表达式。下面是一个简化的示例: // Example-0; It is NOT compilable. var xs = from v in Enumerable.Range( 0, 4 ) select w => w; 但是,该示例无法编译。(我使用的是C#-7.0/.NETFramework 4.7.2) 错误CS1942:select'子句中的表达式类型不正确。调用Select'时类型推断失败 我在下面尝试了另一种sililar模式:
select
标记中使用lambda表达式。下面是一个简化的示例:
// Example-0; It is NOT compilable.
var xs = from v in Enumerable.Range( 0, 4 ) select w => w;
但是,该示例无法编译。(我使用的是C#-7.0/.NETFramework 4.7.2)
错误CS1942:select'子句中的表达式类型不正确。调用
Select'时类型推断失败
我在下面尝试了另一种sililar模式:
// Example-1; It can compile.
Func< int, int > f = w => w;
var xs = from v in Enumerable.Range( 0, 4 ) select ( v, f );
如何对其进行编码?您可以使用这种语法来选择Func
:
您必须选择使用方法语法还是查询语法。将它们混合在一起会使它们相当难以阅读、难以掌握、难以测试和维护
使用方法语法时,查询将很容易:
var result = Enumerable.Range( 0, 4 ); // no select needed
假设您简化了问题:
Func<int, int> f = x => 4*x*x - 2*x +8;
var result = Enumerable.Range(0,4).Select(x => f(x));
也许这个问题有点模棱两可,但OP似乎希望选择funcs作为结果。选择的方式不是选择函数,而是选择函数的结果。例如,如果不执行func,则无法获取结果的第一个元素。
xs.ToList().ForEach(x => MessageBox.Show(x(1).ToString()));
var result = Enumerable.Range( 0, 4 ); // no select needed
Func<int, int> f = x => 4*x*x - 2*x +8;
var result = Enumerable.Range(0,4).Select(x => f(x));
var result = Enumerable.Range(0,4).Select(i => 4*i*i - 2*i + 8;