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

如何从内部类读写外部类的string[]数组?解决数组标识报错

解决内部类访问外部类数组属性的报错问题

运行你提供的代码时出现报错:The expression 'outie.s' does not denote an array,核心原因是非静态内部类直接访问外部类的实例成员时,没有明确指定外部类的实例引用,编译器无法定位到对应的数组对象。

以下是两种可行的解决方式:


方式一:通过构造器传入外部类实例

修改内部类的构造器,让它接收外部类outie的实例,然后通过该实例访问s属性:

public string[] s;
    public class innie {
        private outie _outer;
        // 构造器接收外部类实例
        public innie(outie outer) {
            _outer = outer;
            // 通过外部类实例访问s数组
            _outer.s[0] = string.joinv("/", _outer.s);
        }
    }
    public outie(string h) {
        s = h.split(";");
        print("s.length is %d\n", s.length);
        // 创建内部类时传入当前外部类实例
        innie wut = new innie(this);
    }
}

void main() {
    outie huh = new outie("c:;1;usr;test");
}

方式二:使用外部类实例的显式引用(部分语言支持)

如果你的语言支持外部类名.this语法,也可以直接在内部类中通过outie.this访问外部类的当前实例:

public string[] s;
    public class innie {
        public innie() {
            // 显式引用外部类实例的s数组
            outie.this.s[0] = string.joinv("/", outie.this.s);
        }
    }
    public outie(string h) {
        s = h.split(";");
        print("s.length is %d\n", s.length);
        innie wut = new innie();
    }
}

void main() {
    outie huh = new outie("c:;1;usr;test");
}

报错原因解释

你原来的代码中,内部类innie的构造器直接写s,编译器会默认尝试访问外部类的静态成员,但s是outie的实例成员(属于每个outie对象),并非静态成员,因此编译器无法识别它为数组,从而抛出错误。通过显式指定外部类的实例引用,就能让编译器正确定位到对应的数组对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:27:05