2017-11-08 9 views
1

誰かが間違っていると指摘できたら。ランダムな名前ジェネレータを作成しようとしていて、割り当てられていないローカル変数を取得しようとしました

public string GenerateName(char gender) 
    { 
     string name; 
     Random rand = new Random(); 


     if (gender == 'm') 
     { 

      string[] maleNames = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\ModifiedMalesNamesList.txt"); 
      string[] lastNames = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\ModifiedLastNamesList.txt"); 
      name = maleNames[rand.Next(0, maleNames.Length - 1)] + " " + lastNames[rand.Next(0, lastNames.Length - 1)]; 

      return name; 
     } 
     else 
     { 

     } 
     return name; 
    } 

コンパイラは、割り当てられていないローカル変数を示します。あなたが値で初期化しない限り、あなたは文字列nameを使用することはできません

string name = string.Empty; 

:これに

string name; 

:このことから

:事前

+1

性別が「m」でない場合はどうなりますか? –

+0

申し訳ありませんが、不完全なmは、女性の名前を生成するmでない場合、男性の略です。 – DarkxDivinityX

+0

@ Kenさんのコメントは、エラーメッセージの原因をあなたに示唆しています。コンパイラは、あなたが値を返すにもかかわらず、 'name'変数が割り当てられていないメソッドを実行する実行パスがあることを、明示的に率直に言っています。 'gender'変数が' 'm ''に等しくないとき、どのような価値が返されるべきだと思いますか? –

答えて

2

で おかげでこれを編集してください。

詳細については、エラーを説明するには、文字列を宣言して値を返さないでください。 stringは参照型であるため、ヌル、空または任意の文字値のコレクションとして初期化する必要があります。それは「条件がを失敗する可能性がある場合」と、それはelse文に行くことを検出したため、コンパイラはあなたにエラーを教えてくれますので、この場合は

は、あなたのifとelse文に、else文に nameのない価値がありませんその後、 name変数を返します。

もしそうなら、if文に行くのではないなら、nameの値はどうなりますか?コンパイラはこれを検出するのに十分スマートです。あなたにもこれを行うことができます:

string name; 
    Random rand = new Random(); 
    if (gender == 'm') 
    { 
     string[] maleNames = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\ModifiedMalesNamesList.txt"); 
     string[] lastNames = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\ModifiedLastNamesList.txt"); 
     name = maleNames[rand.Next(0, maleNames.Length - 1)] + " " + lastNames[rand.Next(0, lastNames.Length - 1)]; 

     return name; 
    } 
    else 
    { 
     name = ""; 
    } 
    return name; 

をこのような場合には、あなたはすべての根拠をカバーし、それがエラーをトリガしないように、あなたは安全値で文字列nameを返すことができます。

+0

string.Emptyが問題を解決できた理由を説明できるかと思われています。それは本当に役立つので、どこから問題が生じるのか理解しています。私はそれを繰り返さないでください – DarkxDivinityX

+0

私は私の答えをさらに説明して編集しました。 @DarkxDivinityX –

関連する問題