【问题标题】:Except method gives me wrong answer just for one instance除了方法只在一个实例中给我错误的答案
【发布时间】:2013-11-12 08:24:32
【问题描述】:

我通过这个命令创建一个列表

var terminalList = sourceLists.Where(t => t.TagNo == tagList)
                              .Where(t => t.FromTerminal.Length > 0)
                              .Select(t => parseTerminal(t.FromTerminal))
                              .OrderBy(t => t).ToList();

它适用于每个Tagno,除了创建这样一个列表的人

terminalList={33,35}

当我使用这个命令时

var result = Enumerable.Range(terminalList.Min(), terminalList.Max())
                       .Except(terminalList)
                       .ToList();

我检查过了。 terminalList.Min() 是 33,terminalList.Max() 是 35。在这种情况下,terminalList 有 2 个项目。

我得到这个答案:

result = {34,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67}

哪个是错误的正确答案是{34}

如何追踪问题?

【问题讨论】:

    标签: c# linq


    【解决方案1】:
    public static IEnumerable<int> Range(
        int start,
        int count
    )
    

    在哪里

    start - 序列中第一个整数的值。 count - 要生成的连续整数的数量。

    所以Enumerable.Range(33,35) 从 33 开始生成 35 个元素,然后删除 33 和 35 并得到显示的结果

    【讨论】:

      【解决方案2】:

      尝试改变这个:

      var result = Enumerable.Range(terminalList.Min(), terminalList.Max())
                             .Except(terminalList)
                             .ToList();
      

      到这里:

      var result = Enumerable.Range(terminalList.Min(), terminalList.Max() - terminalList.Min())
                             .Except(terminalList)
                             .ToList();
      

      正如 Guru Stron 所说,您错误地使用了 Enumerable.Range()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-07
        • 2018-09-13
        • 2018-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多