我创建了一个自定义词典来实现IDataErrorInfo
接口,但是当我尝试将值设置为此词典的实例时:
自定义词典:
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(); }
}
}
然后:
MyDictionary<string, string> myDict = new MyDictionary<string, string>();
Dictionary["key"] = "value";
我收到以下错误:
属性或索引器'MyDictionary.this [string]'无法分配 - 它是只读的
我想我错过了某种Getter / Setter。但是这不应该从基类Dictionary继承吗?我该如何创建它?
答案 0 :(得分:1)
您的问题是,IDataErrorInfo
也实现了this[string]
索引器。
public string this[string columnName]
{
get { ...; }
}
如果要访问Dictionary
的索引器,则需要将变量强制转换为Dictionary
(继承问题之一)
((Dictionary<string,string>)variableName)["key"] = "something";
甚至更好(因为你可能永远不会手动使用IDataErrorInfo
),明确地实现界面 :
string IDataErrorInfo.this[string columnName]
{
get { return ...; }
}
通过这种方式,您可以像往常一样使用Dictionary
,通过投射使用IDataErrorInfo
索引器
dictionaryVariable["key"] = "something";
string error = ((IDataErrorInfo)dictionaryVariable)["key"];
答案 1 :(得分:0)
Dictionary有一个名为添加的方法,你应该用它来添加到字典中。您还可以使用.Contains来确保密钥尚未在字典中使用。