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

C#实例未在当前上下文存在问题求助:根据性别创建类实例报错

解决C#中实例变量作用域导致的访问错误问题

嗨,我来帮你搞定这个问题~你遇到的报错核心原因是变量作用域的问题,我一步步给你解释和解决:

为什么会报错?

你在if和else if的代码块里分别声明了real_sex变量:

if (sex == "boy") {
    // 这里的real_sex只在这个{}包裹的代码块里有效
    Boy real_sex = new Boy { ... };
}

在C#中,变量的作用域就是它被声明的那个代码块,出了这个块,这个变量就相当于“不存在”了,所以你在块外面调用real_sex.Characteristics()时,编译器找不到这个变量,自然就报错啦。

解决方案:提前声明变量,用面向对象多态优化

最规范的做法是利用面向对象的多态特性,先定义一个基类,让Boy和Girl继承它,这样就能在外部统一声明变量类型,再在分支里实例化具体的子类。

第一步:定义基类和子类

先把你的Boy和Girl类改成继承自同一个基类(比如Person):

// 基类,定义共同的属性和方法
public class Person
{
    public string Firstname { get; set; }
    public string Secondname { get; set; }
    // 定义虚方法,让子类重写实现各自逻辑
    public virtual void Characteristics() {}
}

public class Boy : Person
{
    // 重写基类方法,实现Boy的特性逻辑
    public override void Characteristics()
    {
        Console.WriteLine($"I'm a boy named {Firstname} {Secondname}");
    }
}

public class Girl : Person
{
    // 重写基类方法,实现Girl的特性逻辑
    public override void Characteristics()
    {
        Console.WriteLine($"I'm a girl named {Firstname} {Secondname}");
    }
}

第二步:修改主程序代码

在if/else块外面先声明Person类型的变量,然后在分支里给它赋值具体的子类实例:

Console.WriteLine("Are you a boy or a girl?");
string sex = Console.ReadLine();
Console.WriteLine(sex);

while ((sex != "boy") && (sex != "girl"))
{
    Console.WriteLine("That is not a valid sex. Please answer the question again.");
    sex = Console.ReadLine();
}

// 先在外部声明变量,作用域覆盖后续所有代码
Person real_sex = null;

if (sex == "boy")
{
    Console.WriteLine("You are a boy");
    real_sex = new Boy { Firstname = "George", Secondname = "Smith" };
}
else if (sex == "girl")
{
    Console.WriteLine("You are a girl");
    real_sex = new Girl { Firstname = "Charlotte", Secondname = "Smith" };
}

// 现在可以正常调用方法了!
real_sex.Characteristics();

额外小提示

如果你暂时不想用基类,也可以用dynamic类型(但不推荐,因为会失去编译时类型检查,容易隐藏错误):

dynamic real_sex = null;
// 后面的赋值逻辑和上面一致
real_sex.Characteristics();

但还是建议用基类的方式,这是更符合面向对象设计的写法,也能让代码更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:07:50