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

   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 语句之前声明变量,但在实例中它的行为似乎有所不同。任何人都可以帮忙吗?谢谢你。


慕森王
浏览 456回答 2
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 设置为男孩或女孩。

至尊宝的传说

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 hereReal_Sex.Characteristics();Have to run here}Else {Same here...}Or you can make a dynamic variable outside the scopeConsole.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();
打开App,查看更多内容
随时随地看视频慕课网APP