假设我的课程列表如下:
static class Accounts
{
public static List<Account> Items;
...
}
我有办法让foreach启用,这样我就可以在不参考Items列表的情况下执行foreach:
foreach(帐户中的帐户帐户)?
答案 0 :(得分:2)
没有。根据C#5.0规范的10.1.1.3节,静态类不能实现接口。
静态类声明受以下限制:
...
- 静态类可能不包含基类规范(第10.1.4节),并且不能显式指定基类或已实现接口的列表。静态类隐式继承自类型对象。
...
因此,无法实现IEnumerable
,这就是foreach
的工作方式。
我探讨了使用foreach
查看成员查找或GetEnumerator
如果没有找到接口这一事实的选项,但这也不起作用,因为expr
不幸的是,foreach
期待的参数不支持类型名称。
最好的选择是使不静态,而是遵循单例模式。也就是说,拥有一个静态属性,它是该类唯一允许的实例。但这并不能说明阅读房产的必要性,所以无论如何它都不会给你任何东西。
如果你只是想掩盖实现(好的调用),你可以创建IEnumerable<Account>
类型的属性,然后将它设置为相等(无论你在哪里)到新的List<Account>
。然后,您不允许通过合同,其他类来修改列表,并且您没有将它们与实现相关联。无论如何,这些是为这样的事情实现IEnumerable
的主要优点。所以这应该足够了。
答案 1 :(得分:0)
为什么不直接使用清单?
foreach (Account account in Accounts.Items)
如果要实现此功能,则需要继承IEnumerable接口并实现其行为。
在我看来,这样做比直接使用列表更令人困惑。