2010-12-12 19 views
2

Warum ist es nicht ok IEnumerable<T> als eine Art wieIEnumerable <T> Frage

zum Beispiel etwas in einer Klasse für eine Eigenschaft zu verwenden
public class Example 
{ 
    public IEnumerable<Int32> Ids {get; private set;} 
    publicIEnumerable<string> Names {get; private set;} 
} 

Leider war das Problem nicht, dass es nicht kompilieren, vermisste ich die Öffentlicher Zugriff auf das Schreiben der Sachen hier war die Frage, warum IEnumerable nicht für eine Eigenschaft zu verwenden. Aber wenn ich weiter lese, merke ich, dass wenn wir nur etwas brauchen, um es zu durchlaufen und nicht zu modifizieren (hinzufügen, entfernen) als das (unter Verwendung von IEnumerable), vollkommen akzeptabel ist.

+5

Wer hat gesagt, es ist nicht Okay? –

+0

denke, stylecop beklagt sich darüber. Ich bin auch nicht sicher, warum – devrooms

+4

Wenn Sie eine Frage "Warum kompilieren nicht" haben, könnten Sie zumindest den Compiler-Fehler enthalten. –

Antwort

13

Das Problem ist, dass die Standard-Zugänglichkeit von Mitgliedern in Klassen bereits privat ist, so dass Ihr Code entspricht:

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

das, weil zu kompilieren schlägt fehl, wenn Sie einen zusätzlichen Zugriffsmodifikator für einen Getter oder Setter gehören Es muss restriktiver sein als der gesamte Zugang der Immobilie. Es ist nicht in diesem Fall.

Wenn Sie die allgemeine Eigenschaft public obwohl machen, wird es ohne Probleme kompilieren:

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

(das ist vorausgesetzt, eine using-Direktive haben für den System.Collections.Generic Namespace, natürlich.)

Verwandte Themen