2017-02-09 3 views
0

私はHighScoresオブジェクトを作成する瞬間にファイルに書き込もうとしています。私は名前とスコアのプロパティをファイルのテキストとして使用しようとしていますが、オブジェクトを初期化しても、それぞれnullと0のようです。だから私の質問は「David:88」と書かないのはなぜですか?プロパティを使用してファイルに書き込む

static void Main(string[] args) 
{ 
    HighScores David = new HighScores() { Name = "David", Score = 88 }; 
} 

class HighScores 
{ 
    public string Name { get; set; } 

    private int score; 
    public int Score 
    { 
     get 
     { 
      if (score < 50) 
      { 
       return 0; 
      } 
      return score; 
     } 
     set 
     { 
      score = value; 
     } 
    } 

    public HighScores() 
    { 
     // Opening and writing to the file    
     FileStream fileStream = File.OpenWrite(path); 
     StreamWriter writer = new StreamWriter(fileStream); 
     writer.Write($"{Name} : {Score} \n"); 
     writer.Close(); 
    } 
} 

答えて

0

アンドレが正しく指摘するように、あなたが以下のように持っているあなたは新しいHighScoresオブジェクトを作成するときに、「コンストラクタ」public HighScores()が呼び出されます。残念ながらプロパティNameScoreが初期化されていない

HighScores David = new HighScores() { Name = "David", Score = 88 }; 

HighScores David = new HighScores("David", 88); 

その後、あなたはプロパティを設定することができますHighScores「コンストラクタ」に一致するシグネチャを設定し、それが期待どおりに動作する必要があります。それは「コンストラクタ」であるので、単にあなたが以下のような通常のコンストラクタと同じように変数を渡します私はAndreと同意しますが、これはファイルへの書き込みは別の方法であり、理にかなった "Constructor" Hopeの一部ではないはずです。

public HighScores(string name, int score) { 
    Name = name; 
    Score = score; 
    using (FileStream fileStream = File.OpenWrite(path)) { 
    StreamWriter writer = new StreamWriter(fileStream); 
    writer.Write($"{Name} : {Score} \n"); 
    writer.Close(); 
    } 
} 

+0

良い点。初期化子はコンストラクタと同時に実行されたと思っていましたが、直後に実行されます。 – DRockClimber

1

私の問題は、コンストラクタがコード内の「セット」の前に実行されることだと思います。あなたのコード(あなたのコンストラクタ、プロパティセット内の)にブレークポイントを設定し、Step Intoを使用すると、すべてのコードがどのような順序で実行されているかが分かります。

したがって、コンストラクタに値を書き込むのではなく、実際の方法に変換する。

変更

public void SaveScores() 

にライン

public HighScores() 

は、後に、あなたの "新しい" あなたのオブジェクトまでの行を追加します。

David.SaveScores(); 

これでうまくいくはずです。

私は、使用/廃棄パターンも活用しています。

using (var fileStream = File.OpenWrite(path)) 
{ 
    // do stuff 
} 
// dotNet will be sure to call Dispose and clean up the fileStream. 
+0

よろしくお願い致します。 – DRockClimber

関連する問題