C # Использование Enumerable Range и Except с пользовательским классом для определения отсутствующего порядкового номера - PullRequest
2 голосов
/ 19 марта 2010

у меня есть List<MyClass>

Класс такой:

private class MyClass
        {

            public string Name{ get; set; }

            public int SequenceNumber { get; set; }

        }

Я хочу выяснить, какие порядковые номера могут отсутствовать. Я могу видеть, как это сделать здесь однако, потому что это класс, я не уверен, что делать?

Я думаю, что могу справиться с методом кроме нормально с моим собственным IComparer, но метод Range я не могу выяснить, потому что он только исключает int, поэтому он не компилируется:

Enumerable.Range(0, 1000000).Except(chqList, MyEqualityComparer<MyClass>);

Вот 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
        }

1 Ответ

5 голосов
/ 19 марта 2010

Вы всегда можете проецировать класс на порядковый номер, так как это то, что вас интересует из класса, что даст вам IEnumerable<int>, который может быть напрямую исключен из диапазона, например,

Enumerable.Range(0, 1000000).Except(chqList.Select(c => c.SequenceNumber));

Это вернет недостающие порядковые номера. Обратите внимание, что это предполагает chqList список MyClass объектов.

...