C#属性语法this []

Joe*_*Joe 0 c# properties

在搜索C#相当于Java的Hashmap时,我遇到了一段我以前从未见过的代码.希望有人能解释这个类中属性定义的签名.

public class NullableDictionnary : Dictionary<string, string>
{
    string null_value;


    public StringDictionary this[string key]
    {
        get
        {
            if (key == null) 
            {
                return null_value;
            }
            return base[key];
        }
        set
        {
            if (key == null)
            {
                null_value = value;
            }
            else 
            {
            base[key] = value;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

具体来说,是什么意思this[string key]

Sel*_*enç 5

这就是索引器.你可以阅读文档:

索引器允许类或结构的实例像数组一样被索引.索引器类似于属性,除了它们的访问器接受参数.

基本上,这允许您使用索引访问您的元素.在这种情况下,您可以NullableDictionnary像这样访问您的元素:

NullableDictionnary[key]
Run Code Online (Sandbox Code Playgroud)

key应该是string因为你的类继承自Dictionary<string, string>.

通常,如果你将一个null键传递给a的索引器,Dictionary<TKey, TValue>你将得到一个ArgumentNullException.But,你在这里扩展这个索引器并在键传递为null时返回一个默认值.例如,这将抛出ArgumentNullException:

var dict = new Dictionary<string, string>();
Console.WriteLine(dict[null]); // ArgumentNullException
Run Code Online (Sandbox Code Playgroud)

但这不会:

 var dict = new NullableDictionnary();
 Console.WriteLine(dict[null]);
Run Code Online (Sandbox Code Playgroud)

这将写入null_value变量的值.最后一点,你应该改变索引器的返回类型string,StringDictionary否则它将无法编译.

 public string this[string key]
Run Code Online (Sandbox Code Playgroud)