1

重複の可能性:
C# で角かっこ演算子をオーバーロードするにはどうすればよいですか?

クラスの場合、C# で演算子 [] をオーバーロードすることは可能ですか?

もしそうなら、オーバーロードされた関数 [] を宣言する正しい構文は何ですか?

また、演算子 [] は、指定されたパラメーターに基づいて異なるデータ型を返すことができますか? そうでない場合、私の他の解決策は何だと思いますか? 代わりにオブジェクトを使用する必要がありますか?

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

3 に答える 3

3

C# では、これらはインデクサーと呼ばれます。

構文:

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

返せるオブジェクトは 1 つだけです。返さなければならないすべての型オブジェクトに対して、代わりに基底クラスを使用してください。

于 2012-06-25T09:06:59.737 に答える
2
于 2012-06-25T09:06:21.560 に答える