用 C# 遍历一个包含元组的列表

7

我在C#中有一个列表,叫做MyList

List<Tuple<string, int, int>> MyList= new List<Tuple<string, int, int>>() 
        {
           Tuple.Create("Cars", 22, 3),
           Tuple.Create("Cars", 28, 5),
           Tuple.Create("Planes", 33, 6)
        };

我希望能够按照上面填写列表的顺序循环整个列表,并且能够逐个获取每个列表项的值,例如 Cars, 22, 3。我该怎么做呢?我想我必须以某种方式使用ForEach


2
通常,您会编写循环以便在集合上进行循环。您尝试了什么,又有哪些没有奏效? - David
循环确实是你所需要的! - Ric
你可以切换到命名元组,它更清晰易读。 - Pavel Anikhouski
我知道我需要一个循环,但我不知道该如何编写它。这是我所做的:´ MyList.ForEach(Tuple<string, int, int> tuple) { };` - KGB91
@KGB91,那不是一个循环。那是试图使用具有不正确的lambda语法的ForEach方法。foreach(var ... in MyList){ ... }才是一个循环。 - Panagiotis Kanavos
@KGB91,你可以像我在下面的回答中那样使用简单的for循环。 - LopDev
3个回答

10
你可以使用简单的foreach循环,Item1Item2Item3表示具有相应类型的未命名元组项。
foreach (var item in MyList)
{
    string name = item.Item1;
    int value = item.Item2;
    int something = item.Item3;
}

你还可以切换到C# 7中提供的命名元组。它们更易读,并允许为元组项定义自定义名称并使用解构。
var MyList = new List<(string name, int value, int someting)>()
{
    ("Cars", 22, 3),
    ("Cars", 28, 5),
    ("Planes", 33, 6)
};

foreach (var item in MyList)
{
    var name = item.name;
    var value = item.value;
}

当使用命名元组时,它可以工作,但我会收到“类型或命名空间名称“ValueTuple”在命名空间“System”中不存在”的错误。 - KGB91
1
@KGB91 这个功能从C# 7和 .NET 4.6.1开始提供。如果你没有自带的话,可以尝试安装 System.ValueTuple 包。 - Pavel Anikhouski
1
@KGB91,你可以使用我的答案,它更简单。 - LopDev
是的,但使用这段代码填充元组更容易 :) - KGB91

2
如果你想更明确地表达你的值是什么,你可以在foreach循环中明确地设置它们,就像这样:
List<Tuple<string, int, int>> myList= new List<Tuple<string, int, int>>() 
        {
           Tuple.Create("Cars", 22, 3),
           Tuple.Create("Cars", 28, 5),
           Tuple.Create("Planes", 33, 6)
        };    

foreach ((string type, int fuel, int amount) vehicles in myList) {
        string item1 = vehicles.type;
        int item2 = vehicles.fuel;
        int item3 = vehicles.amount;
    }

1
这是一个易于理解和简单的解决方案,可以帮助您。
您可以使用一个for循环。
  • 项目1(string),
  • 项目2(int),
  • 项目3(int

按照您放置它们的顺序和格式,它们是Tuple Items

下面的代码是loop

for (int i = 0; i < MyList.Count; i++)
{
     string item1 = MyList[i].Item1;
     int item2 = MyList[i].Item2;
     int item3 = MyList[i].Item3;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接