【问题标题】:IEnumerable<T> questionIEnumerable<T> 问题
【发布时间】:2010-12-12 13:05:31
【问题描述】:

为什么不能使用IEnumerable&lt;T&gt; 作为类中属性的类型 例如像

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

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

【问题讨论】:

  • 认为 stylecop 抱怨它。我也不确定为什么
  • 如果你有一个“为什么不编译”的问题,你至少可以包含编译器错误。
  • @devrooms 您具体指的是哪个规则?我从来没有抱怨过使用 IEnumerable 作为属性类型。事实上,我一直都这样做。

标签: c# .net compiler-errors


【解决方案1】:

问题是类中成员的默认可访问性已经是私有的,所以你的代码相当于:

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 指令。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多