OK, mam nadzieję, że społeczność jako całość pomoże nam w rozwiązaniu debaty w miejscu pracy, która trwa już od jakiegoś czasu. Ma to związek z definiowaniem interfejsów, które akceptują lub zwracają listy pewnego rodzaju. Istnieje kilka sposobów, aby to zrobić:Które wolisz dla interfejsów: T [], IEnumerable <T>, IList <T> lub inne?
public interface Foo
{
Bar[] Bars { get; }
IEnumerable<Bar> Bars { get; }
ICollection<Bar> Bars { get; }
IList<Bar> Bars { get; }
}
Moja własna preferencja jest użycie IEnumerable dla argumentów i tablic dla wartości zwracanych:
public interface Foo
{
void Do(IEnumerable<Bar> bars);
Bar[] Bars { get; }
}
Mój argument za tym podejściem jest to, że klasa realizacja może utworzyć Lista bezpośrednio z IEnumerable i po prostu zwróć ją za pomocą List.ToArray(). Jednak niektórzy uważają, że IList powinien zostać zwrócony zamiast tablicy. Problem, który mam tutaj, polega na tym, że teraz musisz ponownie skopiować go z ReadOnlyCollection przed powrotem. Opcja zwracania IEnumerable wydaje się kłopotliwa dla kodu klienta?
Czego używasz/preferujesz? (szczególnie w odniesieniu do bibliotek, które będą używane przez innych programistów spoza organizacji).
Widziałem błędy moich sposobów. Jak wiele stanów poniżej jest oczywiste, programiści nie widzą właściwości T [] jako niezmiennie Myślę, że moje nadużywanie ich nauczyło mnie pewnych złych nawyków, nigdy naprawdę nie obchodziło mnie, czy zmodyfikowały matrycę, ponieważ to była kopia, ale zdałem sobie sprawę z zamieszania, które powoduje. Zwycięzca Myślę, że –