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

如何实现数组Getter/Setter无异常处理索引越界,如越界返回指定值?

嗨,我来帮你搞定这个问题!

你当前的代码没法正常工作,核心原因有两个:

  1. 你写的是普通的Board属性,但普通属性的get/set方法里根本没有index参数——这是语法上的错误,编译器根本认不出这个index是哪来的。
  2. 就算忽略语法问题,你在get里写return Board[index]会触发无限递归,因为调用Board[index]又会回到这个get方法里。

要实现你想要的「通过Board[1]访问合法索引值、Board[-1]返回3」的效果,你需要用C#索引器(Indexer),而不是普通属性。下面是正确的实现方式:

基础实现(直接通过实例索引访问)

首先我们需要一个私有字段来存储实际的数组数据,然后定义索引器:

// 私有字段:存储实际的棋盘数据,这里可以根据你的需求初始化长度
private byte[] _board = new byte[8];

// 索引器:让类的实例可以像数组一样用[index]访问
public byte this[int index]
{
    get
    {
        // 检查索引是否在合法范围内
        if (index >= 0 && index < _board.Length)
            return _board[index];
        // 越界时返回指定的3
        else
            return 3;
    }
    set
    {
        // 只有合法索引才执行赋值操作
        if (index >= 0 && index < _board.Length)
            _board[index] = value;
        // 越界时可以选择什么都不做,或者添加日志提示,根据你的需求来
    }
}

使用的时候直接像操作数组一样:

var game = new YourGameClass(); // 这里替换成你的类名
byte validValue = game[1]; // 获取索引1的合法值
byte outOfRangeValue = game[-1]; // 返回3
game[5] = 10; // 给索引5赋值
game[-2] = 20; // 越界,赋值操作会被忽略

如果你一定要用Board[xxx]的语法(命名索引器)

如果你希望严格按照Board[1]、Board[-1]的方式访问,C# 7.0及以上版本支持命名索引器,只需要加一个特性即可:

using System.ComponentModel;

// 私有字段依然保留
private byte[] _board = new byte[8];

// 添加IndexerName特性,指定索引器的名称为Board
[IndexerName("Board")]
public byte this[int index]
{
    get
    {
        if (index >= 0 && index < _board.Length)
            return _board[index];
        else
            return 3;
    }
    set
    {
        if (index >= 0 && index < _board.Length)
            _board[index] = value;
    }
}

这时候你就可以用你期望的语法访问了:

var game = new YourGameClass();
byte val = game.Board[1]; // 获取合法索引值
game.Board[3] = 5; // 合法赋值
byte outVal = game.Board[-1]; // 返回3

关键要点总结:

  • 必须用索引器(this[int index])来实现数组式的索引访问,普通属性做不到
  • 一定要用私有字段存储实际数据,避免递归调用
  • 越界判断逻辑要放在索引器的get和set块里,确保不会触发系统自带的索引越界异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:44:13