You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中重载默认get、set方法?带索引实现遇编译失败

解决C#中带索引的get/set访问器实现问题

嗨,我来帮你搞定这个编译错误,以及实现你想要的带索引的get/set功能~

首先得先指出你代码里的几个关键问题:

  • 数组声明语法错误:C#里数组的正确声明方式是private int[] xx = new int[2];,而不是你写的private int xx[2];,后者是C/C++的写法,C#不支持。
  • 普通属性不能带参数化的get/set:你试图给public int Xx这个普通属性的get、set加参数,但C#的普通属性访问器是无参的。带索引的这种访问逻辑,应该用**索引器(Indexer)**来实现,这才是C#里专门用来支持类似数组式访问的语法。

正确的实现方案

下面是符合你需求的代码示例,用索引器来实现带索引的get和set:

public class YourClass
{
    // 正确声明数组并初始化
    private int[] xx = new int[2];

    // 定义索引器,允许通过类实例[index]的方式访问
    public int this[int index]
    {
        get
        {
            // 修复你原代码里的逻辑错误:index ==1 返回bool,不能直接当数组索引
            // 这里假设你想判断索引是否为1,对应取xx[1],否则取xx[0]
            return index == 1 ? xx[1] : xx[0];
        }
        set
        {
            // 同样修复逻辑,给对应索引的数组元素赋值
            if (index == 1)
                xx[1] = value;
            else
                xx[0] = value;
        }
    }
}

使用方式

这样你就可以像操作数组一样访问你的类实例了:

var obj = new YourClass();
obj[0] = 5;       // 调用set方法,给xx[0]赋值
int val = obj[1]; // 调用get方法,获取xx[1]的值

进阶优化:添加索引合法性检查

为了避免索引越界的问题,你可以在索引器里加上合法性校验:

public int this[int index]
{
    get
    {
        if (index < 0 || index >= xx.Length)
            throw new IndexOutOfRangeException($"索引 {index} 超出范围,合法索引为0和1");
        return xx[index];
    }
    set
    {
        if (index < 0 || index >= xx.Length)
            throw new IndexOutOfRangeException($"索引 {index} 超出范围,合法索引为0和1");
        xx[index] = value;
    }
}

如果你同时需要一个普通属性(比如访问数组的第一个元素),可以额外添加一个普通属性,和索引器互不冲突:

public int Xx
{
    get => xx[0];
    set => xx[0] = value;
}

内容的提问来源于stack exchange,提问作者elections 12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:30:02