为了账号安全,请及时绑定邮箱和手机立即绑定

当前上下文中不存在 C# 实例

当前上下文中不存在 C# 实例

C#
慕森王 2021-07-16 14:00:31
   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();        }        if (sex == "boy")        {            Console.WriteLine("You are a boy");            Boy real_sex = new Boy            {                Firstname = "George",                Secondname = "Smith"            };        }        else if (sex == "girl")        {            Console.WriteLine("You are a girl");            Girl real_sex = new Girl            {                Firstname = "Charlotte",                Secondname = "Smith"            };        }        real_sex.Characteristics()         我是 C# 新手,所以这可能很容易,但我试图制作一个程序,询问用户的性别,然后根据“男孩”或“女孩”的答案为班级创建一个实例。我已经在“Boy”和“Girl”类中创建了方法“Characteristics”。然而,问题出现在最后一行“real_sex.Characteristics()”,因为“real_sex”在“当前上下文”中不存在。显然,要使用常规变量克服这个问题,您需要在 if 语句之前声明变量,但在实例中它的行为似乎有所不同。任何人都可以帮忙吗?谢谢你。
查看完整描述

2 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

这是一个范围界定问题。当您在代码块内定义变量时,它不会存在于该代码块之外。例如:


int a = 2;

{

    int b = 3;

}

Console.WriteLine("A : " + a.ToString());

Console.WriteLine("B : " + b.ToString());

会打印 A 很好,但会在尝试打印 B 时抛出错误,因为 B 是在打印语句之前结束的代码块中定义的。


解决方案是在与您需要的代码块相同(或更高)的代码块中定义您需要的变量。比较:


int a = 2;

int b = 0;

{

    b = 3;

}

Console.WriteLine("A : " + a.ToString());

Console.WriteLine("B : " + b.ToString());

这会正常工作,现在打印 A : 2 和 B : 3。


所以,改变


        if (sex == "boy")

        {

            Console.WriteLine("You are a boy");

            Boy real_sex = new Boy

            {

                Firstname = "George",

                Secondname = "Smith"

            };

        }

        else if (sex == "girl")

        {

            Console.WriteLine("You are a girl");

            Girl real_sex = new Girl

            {

                Firstname = "Charlotte",

                Secondname = "Smith"

            };

        }


        real_sex.Characteristics()    


        Sex 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()    

当然,您将需要一个名为“Sex”的父类,男孩和女孩从该类派生出来,以便您可以将 real_sex 设置为男孩或女孩。


查看完整回答
反对 回复 2021-07-18
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

You have escope problem.

You need to declara the variable outside the if statement.  


If (){


Code and variables that only exist here can only run here 

//This method have to run here


Real_Sex.Characteristics();

Have to run here

}

Else {

Same here...

}

Or you can make a dynamic variable outside the scope




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

            dynamic real_sex;

            Console.WriteLine(sex); 

        while ((sex != ("boy")) && (sex != ("girl"))) 

    { 

    Console.WriteLine("That is not a valid sex. Please answer the question again."); 

        sex = Console.ReadLine(); }

         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();


查看完整回答
反对 回复 2021-07-18
  • 2 回答
  • 0 关注
  • 455 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信