C# Indexer и Linq
У меня есть свойство в классе:
public int this[int index]
{
get { return _desk[index]; }
set { _desk[index] = value; }
}
Но я не могу использовать этот класс в Linq. Как это сделать?
2 ответа
Если ваш класс не реализует IEnumerable
var query = Enumerable.Range(0, obj.Count)
.Select(index => obj[index])
...
Индексатор не дает автоматически перечисление. Для того чтобы иметь возможность вызывать методы LINQ, вам необходимо реализовать IEnumerable<int>
в вашем классе.
Я предполагаю, что ваш _desk
Объект представляет собой простой массив - если я ошибаюсь здесь и _desk
это какой-то другой класс, имеющий индексатор, вам может понадобиться, чтобы этот класс реализовал IEnumerable<int>
тоже.
Затем вам нужно будет сделать что-то вроде этого:
public class Position : IEnumerable<int>
{
private int[] _desk;
public int this[int index]
{
get { return _desk[index]; }
set { _desk[index] = value; }
}
/* the rest of your class */
public IEnumerator<int> GetEnumerator()
{
return ((IEnumerable<int>)_desk).GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return _desk.GetEnumerator();
}
}
Я понятия не имею, если реализации GetEnumerator()
являются наилучшей практикой при переносе массива, но они должны работать.