为了账号安全,请及时绑定邮箱和手机立即绑定

具有不同类型的 C# 索引器属性

具有不同类型的 C# 索引器属性

C#
心有法竹 2021-12-05 14:58:29
有什么方法可以使用不同类型的索引属性。我试图搜索这个论坛,但这个问题有点不同,因为我根本无法为索引属性指定名称。那么如何做到这一点(当然编译器会抱怨):一个属性返回一个对象另一个数组。在 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;    }}
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

使用相同的签名这是不可能的。编译器如何知道您调用了哪个索引器方法?您可能想要使用第二个参数(例如节点级别的索引),然后编译器可以区分这两个调用。对于属性 1,您可以使用此代码。


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;

    }

}

除了索引器,您始终可以使用带有名称的函数(例如int GetValueAtLevel(int index))。


查看完整回答
反对 回复 2021-12-05
?
Qyouu

TA贡献1786条经验 获得超11个赞

正如@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


查看完整回答
反对 回复 2021-12-05
  • 2 回答
  • 0 关注
  • 178 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信