自定义字典只读属性

时间:2016-05-23 12:51:19

标签: c# dictionary

我创建了一个自定义词典来实现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继承吗?我该如何创建它?

2 个答案:

答案 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来确保密钥尚未在字典中使用。