Проверьте отдельные предметы из списка Valuetuple в C# 7

Пожалуйста, рассмотрите следующий список ValueTuple C#7

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

                    myList.Add((100, 9));  

                    myList.Add((100.50 , 12)); 

Я могу сделать Foreach var i в myList, myList.Max, myList.Average и т. Д., И он будет возвращать оба типа ValueTuple.

Но как я могу проверить и вернуть только значения цен и / или совпадений? Можете ли вы опубликовать примеры, пожалуйста?

2 ответа

Решение

Сопоставление с образцом может использоваться для деконструкции кортежа в операторе 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}");
}

Вы можете просто использовать 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

Я предпочитаю такой подход:

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

В этом случае вам не нужно переопределять имена по мере необходимости в простом операторе foreach, что может привести к ошибкам и усложнить отладку кода при другом переименовании.

Другие вопросы по тегам