C#属性语法this []

时间:2014-03-04 19:40:47

标签: 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;
            }
        }
    }
}

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

2 个答案:

答案 0 :(得分:5)

这就是所谓的索引器。您可以阅读documentation

  

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

基本上,您可以使用索引访问元素。因此,在这种情况下,您可以像这样访问NullableDictionnary元素:

NullableDictionnary[key]

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

通常,如果将空键传递给Dictionary<TKey, TValue>的索引器,则会得到ArgumentNullException。但是在这里,您将扩展此索引器并在键作为传递时返回默认值null 。例如,这将抛出ArgumentNullException

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

但这不会:

 var dict = new NullableDictionnary();
 Console.WriteLine(dict[null]);

这将写入null_value变量的值。最后一个注释,您应该将索引器的返回类型更改为string而不是StringDictionary,否则它将无法编译。

 public string this[string key]

答案 1 :(得分:2)

这是一个索引器属性。基本上提供[]运算符的实现。更多MSDN