是否可以启用静态类foreach?

时间:2015-03-07 20:43:15

标签: c# foreach static-class

假设我的课程列表如下:

static class Accounts
{
   public static List<Account> Items;
   ...
}

我有办法让foreach启用,这样我就可以在不参考Items列表的情况下执行foreach:

foreach(帐户中的帐户帐户)?

2 个答案:

答案 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接口并实现其行为。

在我看来,这样做比直接使用列表更令人困惑。