System.ValueTuple 中元素的数量和类型
Number and type of elements in System.ValueTuple
我一直在寻找 C# 中局部结构的替代方法,这在 C/C++ 中是可能的,但是 not possible in C#。这个问题让我了解了 C# 7.0 (.NET 4.7) 中出现的轻量级 System.ValueTuple 类型。
假设我有两个以不同方式定义的元组:
var book1 = ("Moby Dick", 123);
(string title, int pages) book2 = ("The Art of War", 456);
两个元组都包含两个元素。 Item1
的类型是System.String
,两个元组中Item2
的类型都是System.Int32
。
如何确定元组变量中元素的数量?您可以使用 foreach
?
之类的方法遍历这些元素吗?
快速阅读 official documentation on System.ValueTuple 似乎没有信息。
我猜你要找的是这样的:
public void Run(string[] args)
{
Tuple<string, string, int> myTuple = new Tuple<string, string, int>("1st", "2nd", 3);
LoopThroughTupleInstances(myTuple);
}
private static void LoopThroughTupleInstances(System.Runtime.CompilerServices.ITuple tuple)
{
for (int i = 0; i < tuple.Length; i++)
{
Console.WriteLine($"Type: {tuple[i].GetType()}, Value: {tuple[i]}");
}
}
是的,您可以通过以下 for
循环遍历项目:
var tuple = ("First", 2, 3.ToString());
ITuple indexableTuple = (ITuple)tuple;
for (var itemIdx = 0; itemIdx < indexableTuple.Length; itemIdx++)
{
Console.WriteLine(indexableTuple[itemIdx]);
}
- 诀窍是您需要将
ValueTuple
显式转换为 ITuple
- 该接口公开
Length
and index operator
ITuple
位于 System.Runtime.CompilerServices
命名空间内。
我一直在寻找 C# 中局部结构的替代方法,这在 C/C++ 中是可能的,但是 not possible in C#。这个问题让我了解了 C# 7.0 (.NET 4.7) 中出现的轻量级 System.ValueTuple 类型。
假设我有两个以不同方式定义的元组:
var book1 = ("Moby Dick", 123);
(string title, int pages) book2 = ("The Art of War", 456);
两个元组都包含两个元素。 Item1
的类型是System.String
,两个元组中Item2
的类型都是System.Int32
。
如何确定元组变量中元素的数量?您可以使用 foreach
?
快速阅读 official documentation on System.ValueTuple 似乎没有信息。
我猜你要找的是这样的:
public void Run(string[] args)
{
Tuple<string, string, int> myTuple = new Tuple<string, string, int>("1st", "2nd", 3);
LoopThroughTupleInstances(myTuple);
}
private static void LoopThroughTupleInstances(System.Runtime.CompilerServices.ITuple tuple)
{
for (int i = 0; i < tuple.Length; i++)
{
Console.WriteLine($"Type: {tuple[i].GetType()}, Value: {tuple[i]}");
}
}
是的,您可以通过以下 for
循环遍历项目:
var tuple = ("First", 2, 3.ToString());
ITuple indexableTuple = (ITuple)tuple;
for (var itemIdx = 0; itemIdx < indexableTuple.Length; itemIdx++)
{
Console.WriteLine(indexableTuple[itemIdx]);
}
- 诀窍是您需要将
ValueTuple
显式转换为ITuple
- 该接口公开
Length
and index operator
ITuple
位于 System.Runtime.CompilerServices
命名空间内。