3

次のエラーが表示されます。

宣言される前にローカル変数 'dob' を使用することはできません

これが私の実装です

public class Person
    {
        ...
        public string dob { get; set; }
        ...

       public int getAge()
       {
                DateTime origin = DateTime.Parse(dob);
                return DateTime.Today.Year - origin.Year;
        }

        public string getFormattedDoB()
        {
                DateTime origin = DateTime.Parse(dob);
                string dob = origin.ToString("d");
                return dob;
        }
    }

dob の使用について不平を言っているが、その前にあるのは不平を言っているので、これをどうすればよいかわかりgetFormattedDoB()ませんgetAge()。誰かがこれに光を当てることができれば、それは素晴らしいことです

4

4 に答える 4

10

getFormattedDoB で dob というローカル変数を宣言しました。コンパイラは、それとメンバ dob の違いを見分けることができません。ローカルではなくメンバー変数を意味する場合は、「this」を追加してみてください。

DateTime origin = DateTime.Parse(this.dob);

さらに良いことに、ローカル変数に同じ名前を使用しないでください。

編集:実際にメンバー変数を設定し、新しい変数を作成するつもりがない場合を除きます。その場合、アンドリューが提案したように「文字列」を削除します。

于 2012-04-12T01:48:37.860 に答える
4

問題はdob、プロパティとローカル変数の 2 つがあることです。変数宣言 ( ) のスコープは、string dob = ...ブロック全体 ({との間のすべて}) です。したがって、コンパイラは次の行で次のように考えます。

DateTime origin = DateTime.Parse(dob);

dob 変数が宣言される前に変数を使用しているのに、(私たちは仮定します) 本当にdob propertyを意味していました。

他の人が述べたように、プロパティの名前を変更する必要があります。C# の標準的な命名規則は次のようになります。

public String DateOfBirth { get; set; } 
//(assuming that is what DOB stands for)

またはさらに良い

public DateTime DateOfBirth { get; set; } 
于 2012-04-12T01:49:15.593 に答える
0

変数名「dob」をgetFormattedDoBローカル文字列として再利用したため、コンパイラが混乱しています。考えられる解決策は 2 つあります。

  1. getFormattedDoB でローカル dob の名前を変更します (これは良い習慣であるため、実際に行う必要があります)。
  2. 次の行で this.dob を使用して、クラス レベル変数を指定します (これも良い方法であるため、おそらくこれも行う必要があります。

    DateTime origin = DateTime.Parse(this.dob);

于 2012-04-12T01:48:58.283 に答える
0

dob を再宣言しています

string dob = origin.ToString("d"); 

そのはず

 dob = origin.ToString("d"); 
于 2012-04-12T01:49:25.573 に答える