2010-12-12 2 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

Кто сказал, что это не все в порядке? –

+0

думаю stylecop жалуется на это. Я тоже не уверен, почему – devrooms

+4

Если у вас есть вопрос «почему этот вопрос не скомпилирован», вы могли бы хотя бы включить ошибку компилятора. –

ответ

13

Проблема заключается в том, что доступность по умолчанию членов в классах уже частная, так что ваш код эквивалентен:

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

Это не удается собрать, потому что, когда вы включаете дополнительный модификатор доступа для геттера или сеттеров , он должен быть более ограничительным, чем общий доступ к собственности. Это не в этом случае.

Если вы сделаете общую общенародную собственность, хотя, это будет компилируется без проблем:

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

(Это предполагает, что у вас есть, используя директиву для System.Collections.Generic пространства имен, конечно.)