【问题标题】:How to check List for value in a specific range of values in .NET如何在 .NET 中检查列表中特定值范围内的值
【发布时间】:2016-01-22 11:09:16
【问题描述】:

假设我有一个随机值列表

11, 22, 33, 44, 55, 66, 77, 88

我想提取20-60 之间的所有值让我们说哪个使用该值让我们说40 带有偏移量-20+20

所以我应该只得到22,33,44,55

代码

uint Val = 40;
List<uint> List1 = new List<uint>() {11, 22, 33, 44, 55, 66, 77, 88};
List<uint> CheckedList = List1.Where(t => (Val - 20) >= t && t <= (Val + 20));

我试过这段代码,我无法编译 Linq 很难掌握。

【问题讨论】:

    标签: c# .net linq list


    【解决方案1】:

    如果需要列表,请附加ToList

    List<uint> CheckedList = List1.Where(t => t >= (Val - 20) && t <= (Val + 20)).ToList();
    

    【讨论】:

    • 疯了,就像问题解决了一样,我当然认为 linq 方程是错误的。是的,这真是太好了,但仍然无法在适当的范围内工作,转动太多的值。
    • @SSpoke - 括号没有错,您的条件本身就是错误的。应该是List&lt;uint&gt; CheckedList = List1.Where(t =&gt; t &gt;= (Val - 20) &amp;&amp; t &lt;= (Val + 20)).ToList(); 检查更新。
    • @RahulSingh 谢谢你,现在它更干净、更易于理解的作品完美。 A+
    【解决方案2】:

    你可以试试这个

    List<uint> rangeList=new List<uint>();
    foreach(var values in List1)
    {
      if(values>=(val-20) && values<=(val+20))
      {
           rangeList.Add(values);
      }
    }
    

    【讨论】:

    • 是的,我一直在寻找一种快速的 linq 1 衬里,但如果不可能,我会使用这个,它不会太长
    【解决方案3】:

    LINQ 方法大多返回IEnumerable&lt;T&gt;,要获得List,您可以使用ToList 方法:

     List<uint> CheckedList = List1.Where(t => (Val - 20) >= t && t <= (Val + 20))
                                   .ToList();
    

    或致电List constructor that takes IEnumerable&lt;T&gt;

     List<uint> CheckedList = new List<uint>(list1.Where(t => (Val - 20) >= t && t <= (Val + 20)));
    

    【讨论】:

      【解决方案4】:
       List<uint> CheckedList = List1.Where(t => t>= (Val - 20)  && t <= (Val + 20)).ToList();
      

      结果:22、33、44 和 55。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-31
        • 2021-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多