Проверьте отдельные предметы из списка 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, что может привести к ошибкам и усложнить отладку кода при другом переименовании.