你能以内联方式命名 C# 7 元组项吗?
Can you name C# 7 Tuple items inline?
默认情况下,当使用 C# 7 元组时,项目将命名为 Item1
、Item2
等。
我知道你可以 name tuple items being returned by a method。但是你能做同样的内联代码吗,比如下面的例子?
foreach (var item in list1.Zip(list2, (a, b) => (a, b)))
{
// ...
}
在 foreach
的正文中,我希望能够使用比 [=11] 更好的方式访问末尾的元组(包含 a
和 b
) =] 和 Item2
.
是的,你可以通过解构元组:
foreach (var (boo,foo) in list1.Zip(list2, (a, b) => (a, b)))
{
//...
Console.WriteLine($"{boo} {foo}");
}
或
foreach (var item in list1.Zip(list2, (a, b) => (a, b)))
{
//...
var (boo,foo)=item;
Console.WriteLine($"{boo} {foo}");
}
即使您在声明元组时命名了字段,您也需要解构语法才能将它们作为变量访问:
foreach (var (boo,foo) in list1.Zip(list2, (a, b) => (boo:a, foo:b)))
{
Console.WriteLine($"{boo} {foo}");
}
如果您想在不解构元组的情况下按名称访问字段,则必须在创建元组时命名它们:
foreach (var item in list1.Zip(list2, (a, b) => (boo:a, foo:b)))
{
Console.WriteLine($"{item.boo} {item.foo}");
}
请注意,C# 7.1 将添加对元组名称的改进。元组元素不仅可以显式命名(使用名称冒号语法),而且可以推断出它们的名称。这类似于匿名类型中成员名称的推断。
例如,var t = (a, this.b, y.c, d: 4); // t.a, t.b, t.c and t.d exist
有关详细信息,请参阅 https://github.com/dotnet/csharplang/blob/master/proposals/csharp-7.1/infer-tuple-names.md。
默认情况下,当使用 C# 7 元组时,项目将命名为 Item1
、Item2
等。
我知道你可以 name tuple items being returned by a method。但是你能做同样的内联代码吗,比如下面的例子?
foreach (var item in list1.Zip(list2, (a, b) => (a, b)))
{
// ...
}
在 foreach
的正文中,我希望能够使用比 [=11] 更好的方式访问末尾的元组(包含 a
和 b
) =] 和 Item2
.
是的,你可以通过解构元组:
foreach (var (boo,foo) in list1.Zip(list2, (a, b) => (a, b)))
{
//...
Console.WriteLine($"{boo} {foo}");
}
或
foreach (var item in list1.Zip(list2, (a, b) => (a, b)))
{
//...
var (boo,foo)=item;
Console.WriteLine($"{boo} {foo}");
}
即使您在声明元组时命名了字段,您也需要解构语法才能将它们作为变量访问:
foreach (var (boo,foo) in list1.Zip(list2, (a, b) => (boo:a, foo:b)))
{
Console.WriteLine($"{boo} {foo}");
}
如果您想在不解构元组的情况下按名称访问字段,则必须在创建元组时命名它们:
foreach (var item in list1.Zip(list2, (a, b) => (boo:a, foo:b)))
{
Console.WriteLine($"{item.boo} {item.foo}");
}
请注意,C# 7.1 将添加对元组名称的改进。元组元素不仅可以显式命名(使用名称冒号语法),而且可以推断出它们的名称。这类似于匿名类型中成员名称的推断。
例如,var t = (a, this.b, y.c, d: 4); // t.a, t.b, t.c and t.d exist
有关详细信息,请参阅 https://github.com/dotnet/csharplang/blob/master/proposals/csharp-7.1/infer-tuple-names.md。