我通过此命令创建一个列表
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}
。
如何追踪问题?
答案 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()
。