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

C# OOP中RandomHintGame类构造函数故障排查求助

修复RandomHintGame构造函数的异常问题

让我帮你拆解这两个构造函数的核心问题,以及对应的修复方案:

先说说为啥会出异常

构造函数2的无限递归炸栈

你看构造函数2的定义:

public RandomHintGame(Person person) : this(person)

这里的this(person)会直接调用它自己(因为参数类型完全匹配),相当于构造函数一启动就无限循环调用自己,很快就会触发StackOverflowException——这是最致命的问题。

没正确访问Person的属性

构造函数2里的HasHat、EyeColor、Gender都是Person类的属性,但你直接写这些词,编译器会以为你要访问当前RandomHintGame类的成员,肯定会报编译错误。你得明确引用传入的Person对象,或者从基类Game里获取存储的Person实例。

构造函数1不符合需求

你的需求是构造函数要自动生成随机提示,但构造函数1是直接接收外部传进来的randomHint,完全没做生成逻辑,这显然不符合设计要求。


具体修复步骤

1. 干掉无限递归

把构造函数2里的this(person)改成base(person),直接调用基类Game的构造函数,而不是自己调用自己。

2. 正确引用Person属性

假设基类Game把传入的Person实例存成了可访问的属性(比如public Person Person { get; }),那你可以用base.Person来访问它的属性;或者直接用构造函数参数里的person对象。比如把HasHat改成person.HasHat,这样就能正确获取Person的属性值了。

3. 调整构造函数1(可选)

如果确实需要保留这个构造函数,要么让它调用构造函数2来复用随机生成逻辑,要么如果需求不允许外部传入提示,直接删掉它就行。

修复后的完整代码

class RandomHintGame : Game {
    string randomHint;
    static Random r = new Random();

    // 主构造函数:负责生成随机提示
    public RandomHintGame(Person person) : base(person) {
        GenerateRandomHint();
    }

    // 可选:如果需要支持自定义提示(不符合原需求的话可以删掉)
    public RandomHintGame(string customHint, Person person) : base(person) {
        this.randomHint = customHint;
    }

    // 把生成提示的逻辑抽成私有方法,方便复用和修改
    private void GenerateRandomHint() {
        int randomNumber = r.Next(0, 3);
        Person target = base.Person;
        switch (randomNumber) {
            case 0:
                // 把布尔值转成自然语言,避免输出True/False
                randomHint = $"The person {(target.HasHat ? "has" : "does not have")} a hat.";
                break;
            case 1:
                randomHint = $"The person has {target.EyeColor} eyes.";
                break;
            case 2:
                randomHint = $"The person is a {target.Gender}";
                break;
        }
    }
}

额外小建议

  • 把生成提示的逻辑抽成单独的方法,后续要改提示规则的话,只需要改这一个地方,维护起来更方便。
  • 静态的Random实例是对的,要是每次生成提示都新建Random,很容易出现重复的随机数。
  • 如果HasHat是布尔类型,记得转成自然语言,不然提示会显示The person True a hat,太奇怪了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:23:11