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

ブロックでその変数を宣言しました。 コンパイラが伝えようとしているように、そのブロックの外には存在しません。if

Settingsクラスを使用する場合は、 と記述しSettings.Default.Nameます。

于 2013-10-10T17:41:06.573 に答える
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 に答える