对于某个类,是否可以在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;
}
}
答案 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;
}
}