У меня есть свойство в классе:C# индексатор и Linq
public int this[int index]
{
get { return _desk[index]; }
set { _desk[index] = value; }
}
Но я не могу использовать этот класс в Linq. Как это сделать ?
У меня есть свойство в классе:C# индексатор и Linq
public int this[int index]
{
get { return _desk[index]; }
set { _desk[index] = value; }
}
Но я не могу использовать этот класс в Linq. Как это сделать ?
Если ваш класс не реализует IEnumerable<T>, но имеет индексатор и графа собственности, вы можете создать IEnumerable индексов с использованием Enumerable.Range Method, и проект каждого индекса к элементу коллекции с помощью Enumerable.Select Extension Method:
var query = Enumerable.Range(0, obj.Count)
.Select(index => obj[index])
...
+1, это жизнеспособная альтернатива реализации 'IEnumerable <..>' (особенно если класс не находится под вашим контролем), я не понимаю нисходящее. – Rawling
+1 Очень хорошее решение! Думаю, людям всегда нужен «готовый к использованию» код, даже если вам нужен стеклянный шар, чтобы угадать их намерение ... –
Индексатор автоматически не дает вам перечисление. Чтобы иметь возможность вызывать методы 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()
являются наилучшей практики, когда оберточной массив, но они должны работать.
Просьба привести пример того, что вы пытаетесь сделать. Ваш вопрос непонятен. –
Как вы хотите его использовать? Что значит «Я не могу это использовать»? Если индекс является единственным способом доступа к вашим данным, то вы можете рассмотреть возможность внедрения IEnumerable –
Что значит «Я не могу использовать этот класс»? Мы не видим ни класса, ни того, как вы его пытаетесь использовать. – Jon