2016-05-23 5 views
0

ich ein Benutzerwörterbuch erstellt die IDataErrorInfo Schnittstelle auf sie zu implementieren, aber wenn ich versuche, einen Wert zu einer Instanz dieses Wörterbuch zu setzen:Benutzerwörterbuch read-only Eigenschaft

Benutzerwörterbuch:

public class MyDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IDataErrorInfo 
{ 

    public string Error 
    { 
     get { throw new NotImplementedException(); } 
    } 



    public string this[string columnName] 
    { 
     get { throw new NotImplementedException(); } 
    } 
} 

Dann:

MyDictionary<string, string> myDict = new MyDictionary<string, string>(); 
    Dictionary["key"] = "value"; 

bekomme ich folgende Fehlermeldung:

Property or indexer 'MyDictionary.this[string]' cannot be assigned to -- it is read only

Ich denke, ich vermisse eine Art Getter/Setter. Aber sollte dies nicht von der Basisklasse Dictionary geerbt werden? Wie kann ich es erstellen?

+1

a [MCVE] wären hilfreich, können –

Antwort

1

Ihr Problem ist, dass IDataErrorInfo implementiert die this[string] Indexer zu.

public string this[string columnName] 
{ 
    get { ...; } 
} 

Wenn Sie den Indexer von Dictionary Sie Ihre Variable müssen zugreifen möchten Dictionary (eines der Probleme der Vererbung) werfen

((Dictionary<string,string>)variableName)["key"] = "something"; 

oder noch besser (da werden Sie wahrscheinlich nie verwenden manuell) IDataErrorInfo, implementieren die Schnittstelle explizit:

string IDataErrorInfo.this[string columnName] 
{ 
    get { return ...; } 
} 

T Hut, wie Sie die Dictionary wie gewohnt und die IDataErrorInfo Indexer durch Gießen

dictionaryVariable["key"] = "something"; 
string error = ((IDataErrorInfo)dictionaryVariable)["key"]; 
0

Das Wörterbuch hat eine Methode namens Fügen Sie hinzu, die Sie zum Hinzufügen zum Wörterbuch verwenden sollten. Sie können auch .Contains verwenden, um sicherzustellen, dass der Schlüssel nicht bereits im Wörterbuch verwendet wird.

+0

Aber da ich aus der Klasse „Wörterbuch“ bin erstreckt, die bereits diese Methode implementiert, shouldn‘ t erbt meine benutzerdefinierte Klasse es? –

+0

Ja. Ich habe die Frage falsch gelesen. Manfred Radlwimmer hat die richtige Antwort. –

Verwandte Themen