2009-12-20 1 views
3

У меня есть пара классов, все из которых получены из IQueryResult. Мне нужно, чтобы каждый из этих классов был итерабельным в цикле foreach. К сожалению, цикл foreach не может видеть метод GetEnumerator. Мне удалось использовать его в foreach, используя динамическое ключевое слово, доступное в .NET 4.0, но тогда IQueryResult не нужно выводить из IEnumerable.Создать интерфейс, который происходит от IEnumerable

public interface IQueryResult : IEnumerable<IQueryResult> 
{ 
} 

Как бы вы сделали это более элегантно?

С наилучшими пожеланиями ПК

ответ

-1

а. dont наследует ineterfaces.

b. Вы можете использовать excpilcit оттенок IEnumarable на этом классе, и он будет работать

+0

Почему вы говорите, что хотите? Что не так с интерфейсами наследования? – Iain

+0

реализация интерфейса в классе замечательна. Написание интерфейса для наследования другого, запутывает littel. , и когда вы пытаетесь их использовать, вам нужно бросить вещи вокруг, и это отстой. –

1

Является IQueryResultдействительноIEnumerable<IQueryResult>? Я мог бы ожидать, что, например, (для одной сетки):

public interface IQueryResult<T> : IEnumerable<T> { /* */ } 

или если вы пытаетесь представить несколько сеток:

public interface IQueryResult<T> : IEnumerable<IEnumerable<T>> { /* */ } 

Хотя я мог бы возникнуть соблазн сделать его более явным, как метод:

public interface IQueryResult<T> { 
    IEnumerable<IEnumerable<T>> GetGrids(); // or something 
} 

Обратите внимание, что вы не необходимостиIEnumerable[<T>] для foreach, но это делает жизнь далеко м руда предсказуема и позволяет использовать LINQ и т. д.

 Смежные вопросы

  • Нет связанных вопросов^_^