IEnumerable <t>问题</t>

时间:2010-12-12 13:05:31

标签: c# .net compiler-errors

为什么不能将IEnumerable<T>用作类中属性的类型 例如

之类的东西
public class Example
{
   public IEnumerable<Int32> Ids {get; private set;}
   publicIEnumerable<string> Names {get; private set;}
}

抱歉问题不在于它没有编译,我在这里写错了公共访问者,问题是为什么不使用IEnumerable作为属性。但是当我进一步阅读时,我意识到,如果我们只需要迭代一些东西而不是修改(添加,删除),那么(使用IEnumerable)是完全可以接受的。

1 个答案:

答案 0 :(得分:13)

问题是类中成员的默认可访问性已经是私有的,因此您的代码等同于:

public class Example
{
   private IEnumerable<int> Ids {get; private set;}
   private IEnumerable<string> Names {get; private set;}
}

无法编译,因为当您为getter或setter包含额外的访问修饰符时,它必须比属性的整体访问更具限制性。在这种情况下不是。

如果你公开整体属性,它将编译没有问题:

public class Example
{
   public IEnumerable<int> Ids {get; private set;}
   public IEnumerable<string> Names {get; private set;}
}

(当然,假设您有System.Collections.Generic命名空间的using指令。)