2009-12-20 58 views
3

我有幾個類都從IQueryResult派生。我需要每個類在foreach循環中迭代。不幸的是,foreach循環無法看到GetEnumerator方法。我已經設法在foreach中使用它在.NET 4.0中提供的動態關鍵字,但是IQueryResult不需要從IEnumerable派生。創建從IEnumerable派生的接口

public interface IQueryResult : IEnumerable<IQueryResult> 
{ 
} 

你會如何以更優雅的方式做到這一點?

親切的問候 PK

回答

-1

一個。不要繼承接口。

灣你可以在該類使用excpilcit投地IEnumarable,也將努力

+0

你爲什麼說點?接口接口有什麼問題? – Iain 2009-12-21 16:54:52

+0

在一個類中實現一個接口是非常好用的。 編寫一個接口來繼承另一個接口,正在混淆一個littel。 當你嘗試使用它們時,你需要將東西施放,並且很糟糕。 – 2009-12-21 17:46:09

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做的,但它使生活遠M礦石可預測,並使得使用LINQ等成爲可能。