Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C语言中的“查询表达式”的“选择”标记中使用“lambda表达式”#_C#_Linq_Select_Lambda_Capture - Fatal编程技术网

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;