有没有更好的方法使用var目标变量在C#7中选择一个命名元组?我必须在示例1中做错事,或者完全误解某些事情。我似乎必须明确设置目标类型才能执行此操作。
//1. Fails to compile with "incorrect number of type parameters" issue.
var tuples = source.Select<(int A, int B)>(x => (x.A, x.B));
//2. Compiles
IEnumerable<(int A, int B)> tuples = toCheck.Select(x => (x.A, x.B));
//3. Compiles
var tuples = new HashSet<(int A, int B)>(source.Select(x => (x.A, x.B)));
你可以使用 var
,但您需要确保实际命名元组元素。
在C#7.0中,您需要明确地执行此操作:
var tuples = source.Select(x => (A: x.A, B: x.B));
foreach (var tuple in tuples)
{
Console.WriteLine($"{tuple.A} / {tuple.B}");
}
在C#7.1中,当从属性或字段中获取元组文字中的值时,该标识符将隐式地是元素名称,因此您将能够编写:
var tuples = source.Select(x => (x.A, x.B));
foreach (var tuple in tuples)
{
Console.WriteLine($"{tuple.A} / {tuple.B}");
}
见 专题文件 有关兼容性等的详细信息
你可以使用 var
,但您需要确保实际命名元组元素。
在C#7.0中,您需要明确地执行此操作:
var tuples = source.Select(x => (A: x.A, B: x.B));
foreach (var tuple in tuples)
{
Console.WriteLine($"{tuple.A} / {tuple.B}");
}
在C#7.1中,当从属性或字段中获取元组文字中的值时,该标识符将隐式地是元素名称,因此您将能够编写:
var tuples = source.Select(x => (x.A, x.B));
foreach (var tuple in tuples)
{
Console.WriteLine($"{tuple.A} / {tuple.B}");
}
见 专题文件 有关兼容性等的详细信息
Select
需要2个类型参数: Select<TSource, TResult>
。一个元组 (int A, int B)
只有一种类型,你也可以写它 ValueTuple<int, int>
。因此,如果需要命名元组,则必须编写两个参数
var tuples = source.Select<TypeOfSource, (int A, int B)>(x => (x.A, x.B));