2009-12-20 56 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等成为可能。