在搜索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]?
这就是索引器.你可以阅读文档:
索引器允许类或结构的实例像数组一样被索引.索引器类似于属性,除了它们的访问器接受参数.
基本上,这允许您使用索引访问您的元素.在这种情况下,您可以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)