是否可以使用不同类型的索引属性。 我尝试搜索此论坛,但是这个问题有点不同,因为我根本无法为索引属性指定名称。
那么怎么可能这样做(肯定编译器会抱怨): 一个属性返回一个对象,另一个数组。在Visual Basic中,这种类型是可能的,而在C#中是不可能的?
属性1:
private Point3d this[int index] {
get {
return this.m_Levels[this.m_NodeLevel[index]][index];
}
set {
this.m_Levels[this.m_NodeLevel[index]][index] = value;
}
}
属性2:
private Point3d[] this[int index] {
get
{
return this.m_Levels[index];
}
set
{
this.m_Levels[index] = value;
}
}
答案 0 :(得分:2)
使用相同的签名是不可能的。编译器应如何知道您调用哪个索引器方法?您可能要使用第二个参数(例如节点级别的索引),然后编译器可以区分这两个调用。对于属性1,您可以使用以下代码。
EdgeNGramTokenFilter
您始终可以使用带有名称的函数(例如private Point3d this[int nodeLevel, int index] {
get {
return this.m_Levels[this.m_NodeLevel[nodeLevel]][index];
}
set {
this.m_Levels[this.m_NodeLevel[nodeLevel]][index] = value;
}
}
)来代替索引器。
答案 1 :(得分:0)
正如@slfan所说,您不能为this
属性提供两个相同的签名。
据您所知,您可以进行转换
public int this[int index]
{
get
{
return this.m_array[index];
}
set
{
this.m_array[index] = value;
}
}
具有翻译:
public int get_Item(int index)
{
return this.m_array[index];
}
public void set_Item(int index, int value)
{
this.m_array[index] = value;
}
使其更小:
int this[int index] { get { ... } }
等于(等于?)
int get_Item(int index) { ... }
以与您可以相同的方式:
int get_Item(int index) { ... }
int get_Item(byte index) { ... }
int get_Item(float index) { ... }
int get_Item(string index) { ... }
您可以也可以这样做:
int this[int index] { get { ... } }
int this[byte index] { get { ... } }
int this[float index] { get { ... } }
int this[string index] { get { ... } }
但的操作方式与您无法进行此操作的方式相同:
public int get_Item(int index) { ... }
public int get_Item(int index) { ... } // <-- error
否:
public int get_Item(int index) { ... }
public float get_Item(int index) { ... } // <-- error
您无法做到这一点:
int this[int index] { get { ... } }
int this[int index] { get { ... } } // <-- error
否:
int this[int index] { get { ... } }
float this[int index] { get { ... } } // <-- error