2

请考虑以下 ValueTuple C#7 列表

List<(double prices, int matches)> myList = new List<(double, int)>();

                    myList.Add((100, 9));  

                    myList.Add((100.50 , 12)); 

我可以在 myList、myList.Max、myList.Average 等中执行 Foreach var i,它会返回这两种类型的 ValueTuple。

但是,我如何才能检查并只返回价格和/或匹配的值?您可以发布示例吗?

4

3 回答 3

3

模式匹配可用于在 for-each 语句中解构元组

List<(double prices, int matches)> myList = new List<(double, int)>();
myList.Add((100, 9));
myList.Add((100.50, 12));

foreach (var (price, match) in myList)
{
    Console.WriteLine($"Price: {price}");
    Console.WriteLine($"Match: {match}");
}
于 2018-07-20T11:06:14.610 回答
1

你可以只使用Select(x => x.prices)

static void Main(string[] args)
{
    List<(double prices, int matches)> myList = new List<(double, int)>();
    myList.Add((100, 9));
    myList.Add((100.50, 12));

    var prices = myList.Select(x => x.prices);
    var matches = myList.Select(x => x.matches);

    Console.WriteLine("prices:");
    foreach (var item in prices)
        Console.WriteLine(item);

    Console.WriteLine("\nmatches:");
    foreach (var item in matches)
        Console.WriteLine(item);

    Console.Read();
}

输出:

prices:
100
100.5

matches:
9
12
于 2018-07-14T11:53:33.990 回答
0

我更喜欢这种方法:

var _someCollection = new List<(int Id, string Name)> { (123, "abc") };
...
_someCollection.ForEach(_ => {
   _.Id = 1;
   _.Name = "a";
});

在这种情况下,您不需要在简单的 foreach 语句中根据需要重新定义名称,如果重命名不同,这可能会导致错误并且更难调试代码。

于 2019-11-04T11:25:19.663 回答