0

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

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}

如何追踪问题?

4

2 回答 2

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

在哪里

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

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

于 2013-11-12T08:29:25.383 回答
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()不正确。

于 2013-11-12T08:31:08.693 回答