2010-12-12 55 views
2

为什么它不是确定使用IEnumerable<T>作为一个类型的属性的类 内例如像IEnumerable的<T>问题

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

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

+5

谁说这是不行? – 2010-12-12 13:07:14

+0

认为stylecop抱怨。我也不确定为什么 – devrooms 2010-12-12 13:08:45

+4

如果你有一个“为什么不编译”的问题,你至少可以包含编译器错误。 – 2010-12-12 13:12:38

回答

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命名空间,当然)。

相关问题