为什么不能使用IEnumerable<T>
作为类中属性的类型
例如像
public class Example
{
public IEnumerable<Int32> Ids {get; private set;}
publicIEnumerable<string> Names {get; private set;}
}
抱歉,问题不在于它没有编译,我在这里写东西时错过了公共(public)访问器,问题是为什么不对属性使用 IEnumerable。但是当我进一步阅读时,我意识到如果我们只需要迭代某些东西而不需要修改(添加、删除)那么这(使用 IEnumerable )是完全可以接受的。
最佳答案
问题是类中成员的默认可访问性已经是私有(private)的,所以你的代码等同于:
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 指令。)
关于c# - IEnumerable<T> 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4421784/