【问题标题】:Check individual items from a list of Valuetuple in c# 7从 c# 7 中的 Valuetuple 列表中检查单个项目
【发布时间】:2018-12-22 13:23:40
【问题描述】:

请考虑以下 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。

但是,我怎样才能只检查和返回价格和/或匹配的值?可以发例子吗?

【问题讨论】:

    标签: .net list types valuetuple c#-7.3


    【解决方案1】:

    模式匹配可用于在 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}");
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用Select(x =&gt; 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
      

      【讨论】:

      • 非常感谢!!简单而强大!
      • 如果不是在 IEnumerable 中返回“价格”和“匹配项”,而是在一个新列表中返回,如何做到这一点?是否可以直接执行,或者需要 Select 将值作为 IEnumerable 返回,然后将它们添加到 List 中?
      【解决方案3】:

      我更喜欢这种方法:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-03
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多