在C#中重载[]运算符并给出多个返回值

时间:2012-06-25 09:03:21

标签: c# operator-overloading

  

可能重复:
  How do I overload the square-bracket operator in C#?

对于某个类,是否可以在C#中重载运算符[]?

如果是这样,声明[]重载函数的正确语法是什么?

运算符[]也可以根据给定的参数返回不同的数据类型吗?如果没有,您认为我的其他解决方案是什么?我应该使用Object吗?

public class MyClass {

     private Dictionary<string,Element> eAttribs;
     private Dictionary<string,string> defAttribs;

     // Also can the operator [] returns different data types based off the parameter given?
     // If not, what do you think is my other solution?
     public Element operator[](string attribKey) {
         if (eAttribs.containsKey(attribKey)
            return eAttribs[attribKey];
         else return null;
     }

     // COMPILE Error below: Unexpected symbol '['
     public string operator[](string attribKey) {
         if (defAttribs.containsKey(attribKey)
            return defAttribs[attribKey];
         else return null;
     }
}

3 个答案:

答案 0 :(得分:3)

在c#中,这些被称为索引器。

语法:

public object this[int key]
{
    get
    {
        return GetValue(key);
    }
    set
    {
        SetValue(key,value);
    }
}

您只能返回一个对象。使用基类代替您必须返回的所有类型对象。

答案 1 :(得分:2)

  

对于一个类,可以在C#中重载operator []吗?

是。语法是重载this[]属性(“indexer”):

public Element this[string attribKey] {
    get { … }
    set { … }
}
  

运算符[]也可以根据给定的参数返回不同的数据类型吗?

不,不幸的是没有。 C#一般禁止基于返回类型的重载决策;它只考虑参数类型。

答案 2 :(得分:1)

您可以返回对象或使用dynamic Type

public dynamic this[string key]
{
     get 
     {
         //return value;
     }
     set
     {
         //set value; 
     }
}