IEnumerable <T>вопрос - PullRequest
       23

IEnumerable <T>вопрос

2 голосов
/ 12 декабря 2010

Почему нельзя использовать IEnumerable<T> в качестве типа для свойства в классе например что-то вроде

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

Извините, проблема не в том, что он не компилируется, я пропустил общедоступные средства доступа при написании материала здесь, вопрос был в том, почему не использовать IEnumerable для свойства. Но, читая дальше, я понял, что если нам нужно что-то перебирать, а не изменять (добавлять, удалять), то это (с использованием IEnumerable) вполне приемлемо.

1 Ответ

13 голосов
/ 12 декабря 2010

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

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;}
}

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

...