创建从IEnumerable派生的接口

4

我有几个类,它们都继承自IQueryResult。我需要在foreach循环中对每个类进行迭代。不幸的是,foreach循环无法看到GetEnumerator方法。我成功地使用.NET 4.0中可用的dynamic关键字在foreach中使用它,但这样就不需要让IQueryResult从IEnumerable派生出来。

public interface IQueryResult : IEnumerable<IQueryResult>
{
}

你如何以更优雅的方式实现这个?

敬礼
PK

2个回答

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
}

请注意,您在使用foreach时不一定需要IEnumerable[<T>],但它可以使生活更加可预测,并且可以使用LINQ等功能。

-1

a. 不要继承接口。

b. 你可以在该类上使用显式转换为IEnumarable,它将起作用。


你为什么说点a呢?继承接口有什么问题吗? - Iain
在一个类中实现一个接口是很好的。 编写一个接口来继承另一个接口有点困惑。 当你尝试使用它们时,你需要强制转换一些东西,这很糟糕。 - AK_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接