C#中的索引器,但没有这个

时间:2011-09-28 10:39:18

标签: c# indexer

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

由于

3 个答案:

答案 0 :(得分:1)

不,C#不允许这样做。

规范部分1.6.7.3说:

  

索引器是一个允许对象在其中编入索引的成员   作为一个数组的方式。索引器被声明为属性,除了   成员的名称是后跟写入的参数列表   在分隔符之间[和]。

我建议你使用简单的方法:

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

在你的情况下,你需要key而不是index来提供字典项目,这是非常不同的事情。

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

答案 1 :(得分:1)

不,

实际上你的属性Value已经有来自string的索引器并返回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];

答案 2 :(得分: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];