0

我最近用 C# 编写了这个简短的应用程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Checker
{
    class Program
    {
        static void Main(string[] args)
        {
            Properties.Settings.Default.Save();
            Program re = new Program();
            re.next();
        }
        public void next()
        {
            Console.WriteLine("Have you already entered name?");
            int ch = int.Parse(Console.ReadLine());
            if (ch == 0)
            {
               Console.WriteLine("What is your name?");
               String name = Console.ReadLine();
               Console.WriteLine("Thank you!");
               Console.ReadKey();
            }
            Console.WriteLine("Your name is " + name);
        }
    }
}

现在,我创建了一个设置文件,并在那里创建了一个“名称”变量,类型为“字符串”。

它的范围是“用户”。

所以我希望它使用属性行加载“名称”变量,但由于此错误,我什至无法编译程序:

Error   1   The name 'name' does not exist in the current context

我该如何解决?

4

3 回答 3

4

当您缩进时,您的问题的答案变得更加明显:

String name;
if (ch == 0)
{
    Console.WriteLine("What is your name?");
    name = Console.ReadLine();
    Console.WriteLine("Thank you!");
    Console.ReadKey();
}
else
{
    name = Settings.Default.name;
}
Console.WriteLine("Your name is " + name);

现在您可以看到您在 if 块中定义了一个名为 name 的字符串,因此在 if 块之外的 Console.WriteLine 中使用它超出了范围!将最后一个 Console.WriteLine 移到 if 块内以解决范围问题。


编辑: 根据您的评论,您的代码需要更多逻辑才能实现您想要做的事情。我更新了上面的代码片段以完成我认为您正在尝试做的事情。

于 2013-10-10T17:42:00.140 回答
0

您的意图有点不清楚,但在我看来,您似乎正试图让应用程序显示已保存的用户名,或者如果尚未保存则要求显示用户名。如果是这样的话,这样的事情应该可以工作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Checker
{
    class Program
    {
        static void Main(string[] args)
        {
            Program re = new Program();
            re.next();
            Properties.Settings.Default.Save();
        }
        public void next()
        {
            String name = Settings.Default.name;
            if (String.IsNullOrEmpty(name))
            {
                Console.WriteLine("What is your name?");
                name = Console.ReadLine();
                Settings.Default.name = name;
                Console.WriteLine("Thank you!");
                Console.ReadKey();
            }
            else
            {                    
                Console.WriteLine("Your name is " + name);
            }
        }
    }
}

在您的 OP 中,您的设置在程序退出之前没有被保存,您也没有设置 name 属性。

于 2013-10-10T18:17:36.903 回答
0

您在块声明了该变量。 正如编译器试图告诉您的那样,它不存在于该块之外。if

如果你想使用你的Settings类,写Settings.Default.Name.

于 2013-10-10T17:41:06.573 回答