c# - IEnumerable<T> 问题

标签 c# .net compiler-errors

为什么不能使用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/

相关文章:

javascript - 如何在 JavaScript/Node 中计算 SHA256 哈希和 Base64 字符串编码

c# - 更改c# WebReference url地址

c# - 程序集未找到 NEWBIE 问题

c++ - 当从函数调用传递值时,std::tie 失败并返回 "cannot bind non-const lvalue reference"

java - 无法编译简单的JFACE程序; java.lang.NoClassDefFoundError

c# - 图返回 "Code: ResourceNotFound Message: Invalid version: me Inner error"

c# - 自定义 WebViewPage 在渲染 Razor 模板时注入(inject)代码

c# - 更好的做法 : CheckBox DataBindings vs CheckedChanged event

.net - 如何解决 .Net 命名空间与 'using' 关键字的冲突?

c# - 更新到 Unity 2019.3 后无法编译 Unity WebGL