除了方法,只为一个实例提供了错误的答案

时间:2013-11-12 08:24:33

标签: c# linq

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

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}

如何追踪问题?

2 个答案:

答案 0 :(得分:7)

public static IEnumerable<int> Range(
    int start,
    int count
)

,其中

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

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

答案 1 :(得分:0)

尝试更改此内容:

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()