在搜索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]
是什么意思?
答案 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