1

在 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; }
   }
}

谢谢

4

3 回答 3

1

不,C#不允许这样做。

规范第 1.6.7.3 节说:

索引器是使对象能够以与数组相同的方式被索引的成员。索引器的声明类似于属性,只是成员的名称是 this,后面是写在分隔符 [ 和 ] 之间的参数列表。

我建议您为此使用简单的方法,例如:

public string GetValue(int key)
{
    if (dictionary.ContainsKey(key))
       .....
}

在您的情况下,您通过keynot an来引用字典项目index,这是非常不同的事情。

PS:请记住,Dictionary 不会保留项目的顺序,这在某些情况下可能至关重要!

于 2011-09-28T10:43:13.213 回答
1

不,

实际上,您的属性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];
于 2011-09-28T10:43:32.967 回答
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];
于 2011-09-28T10:46:34.340 回答