Что вы предпочитаете для интерфейсов: T [], IEnumerable <T>, IList <T> или другие?

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

public interface Foo
{
    Bar[] Bars { get; }
    IEnumerable<Bar> Bars { get; }
    ICollection<Bar> Bars { get; }
    IList<Bar> Bars { get; }
}

Я предпочитаю использовать IEnumerable для аргументов и массивы для возвращаемых значений:

public interface Foo
{
    void Do(IEnumerable<Bar> bars);
    Bar[] Bars { get; }
}

Мой аргумент в пользу этого подхода заключается в том, что класс реализации может создать список непосредственно из IEnumerable и просто вернуть его с помощью List.ToArray (). Однако некоторые считают, что IList должен быть возвращен вместо массива. Проблема у меня здесь заключается в том, что теперь вам необходимо снова скопировать его с ReadOnlyCollection перед возвратом. Возможность возврата IEnumerable кажется проблемной для клиентского кода?

Что вы используете / предпочитаете? (особенно в отношении библиотек, которые будут использоваться другими разработчиками за пределами вашей организации)

Ответы на вопрос(8)

Ваш ответ на вопрос