在 C# 中创建索引器是可能的,但是像这样:
public class MyClass
{
Dictionary<int, string> myCollection = new Dictionary<int, string>();
public string Value[int i]
{
get { return myCollection[i]; }
set { myCollection[i] = value; }
}
}
谢谢
不,C#
不允许这样做。
规范第 1.6.7.3 节说:
索引器是使对象能够以与数组相同的方式被索引的成员。索引器的声明类似于属性,只是成员的名称是 this,后面是写在分隔符 [ 和 ] 之间的参数列表。
我建议您为此使用简单的方法,例如:
public string GetValue(int key)
{
if (dictionary.ContainsKey(key))
.....
}
在您的情况下,您通过key
not an来引用字典项目index
,这是非常不同的事情。
PS:请记住,Dictionary 不会保留项目的顺序,这在某些情况下可能至关重要!
不,
实际上,您的属性Value
已经有来自字符串的索引器并返回 char。可能你需要这样的东西:
public class MyClass
{
Dictionary<int, string> myCollection = new Dictionary<int, string>();
public Dictionary<int, string> Value
{
get { return myCollection; }
set { myCollection = value; }
}
}
这将是您所期望的行为。
string value = myClassInstance.Value[0];
你不能那样做,(C#不支持)
不如换成
public class MyClass
{
public MyClass()
{
Values = new Dictionary<int, string>()
}
public Dictionary<int, string> Values { get; set }
}
这将允许你做
MyClass foo = new MyClass();
var someVal = foo.Values[3];