为什么不能将IEnumerable<T>
用作类中属性的类型
例如
public class Example
{
public IEnumerable<Int32> Ids {get; private set;}
publicIEnumerable<string> Names {get; private set;}
}
抱歉问题不在于它没有编译,我在这里写错了公共访问者,问题是为什么不使用IEnumerable作为属性。但是当我进一步阅读时,我意识到,如果我们只需要迭代一些东西而不是修改(添加,删除),那么(使用IEnumerable)是完全可以接受的。
答案 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指令。)