2009-12-20 3 views
3

J'ai quelques classes dérivées de IQueryResult. J'ai besoin que chacune de ces classes soit itérable dans la boucle foreach. Malheureusement foreach loop ne peut pas voir la méthode GetEnumerator. J'ai réussi à l'utiliser dans foreach en utilisant le mot-clé dynamique disponible dans .NET 4.0 mais IQueryResult ne doit pas dériver de IEnumerable.Créer une interface qui dérive de IEnumerable

public interface IQueryResult : IEnumerable<IQueryResult> 
{ 
} 

Comment le feriez-vous d'une manière plus élégante?

Cordialement PK

Répondre

-1

a. n'hérite pas ineterfaces.

b. vous pouvez utiliser un casting excpilcit à IEnumarable sur cette classe et cela fonctionnera

+0

Pourquoi dites-vous le point a? Quel est le problème avec hériter des interfaces? – Iain

+0

implémentant une interface dans une classe est magnifique. écrire une interface pour en hériter une autre, c'est embrouiller un peu. et quand vous essayez de les utiliser, vous devez jeter des choses autour, et ça craint. –

1

Est-ce un IQueryResultvraimentIEnumerable<IQueryResult>? Je pourrais attendre, par exemple, que (pour une seule grille):

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

ou si vous essayez de représenter plusieurs grilles:

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

Bien que je pourrais être tenté de rendre plus explicite une méthode:

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

Notez que vous n'avez pas besoin IEnumerable[<T>] pour foreach, mais il rend la vie loin m est prévisible, et permet d'utiliser LINQ etc.

Questions connexes