C#使用可枚举范围和自定义类除外以确定缺失的序列号

Jon*_*Jon 2 c# linq ienumerable c#-3.0

我有一个 List<MyClass>

这个班是这样的:

private class MyClass
        {

            public string Name{ get; set; }

            public int SequenceNumber { get; set; }

        }
Run Code Online (Sandbox Code Playgroud)

我想弄清楚序列号可能缺失的是什么.我可以在这看到如何做到这一点,因为这是一个我不确定该怎么做的课程?

我想我可以使用自己的IComparer处理except方法,但我无法弄清楚Range方法,因为它只能排除int,所以这不会编译:

Enumerable.Range(0, 1000000).Except(chqList, MyEqualityComparer<MyClass>);
Run Code Online (Sandbox Code Playgroud)

这是IComparer:

 public class MyEqualityComparer<T> : IEqualityComparer<T> where T : MyClass
        {
            #region IEqualityComparer<T> Members

            public bool Equals(T x, T y)
            {
                return (x == null && y == null) || (x != null && y != null && x.SequenceNumber.Equals(y.SequenceNumber));
            }

            /// </exception>
            public int GetHashCode(T obj)
            {
                if (obj == null)
                {
                    throw new ArgumentNullException("obj");
                }

                return obj.GetHashCode();
            }

            #endregion
        }
Run Code Online (Sandbox Code Playgroud)

Gre*_*ech 5

您总是可以将类投影到序列号,因为这是您对该类感兴趣的内容,这将为您提供IEnumerable<int>可以直接从该范围中排除的内容,例如

Enumerable.Range(0, 1000000).Except(chqList.Select(c => c.SequenceNumber));
Run Code Online (Sandbox Code Playgroud)

这将返回丢失的序列号.请注意,这假定chqList是一个MyClass对象列表.