私は現在、テキストファイルのフォルダからデータを読み込む関数を作成しています。別の変数を変更すると、このリストはなぜ<T>に更新されますか?
public void loadPatterns()
{
string[] files = Directory.GetFiles("patterns/");
Level pattern = new Level();
List<char> row = new List<char>();
List<List<char>> grid = new List<List<char>>();
for(int i = 0; i < files.Length; i++)
{
var lines = File.ReadLines(files[i]);
foreach(string line in lines)
{
foreach(char c in line)
{
row.Add(c);
}
grid.Add(row);
row.Clear();
}
pattern.grid = grid;
patterns.Add(pattern);
grid.Clear();
}
}
しかしforeach(string line in lines)
ループ終了すると現時点では、グリッドは完全に空である行数を有します。デバッガを調べた後、グリッドに1行追加した後でも、row.Clear()
メソッドは、リストに追加されたデータをクリアし、ローカル変数 'row'のデータをクリアするように見えます。
どうしてですか?
私は主にC++のプログラマーなので、C#をよく知っている人にとっては非常に明白なことを忘れてしまった場合は謝罪します。
C#がコンテナではなく、値のセマンティクスのための参照セマンティクスを持っています。 – milleniumbug
うん、@ミレニウムバグが正しいです。ループ内で新しい行を呼び出す必要があります。なぜClear()が必要ですか? – marlo
助けてくれてありがとう、マシューの答えが働いた。私のテキストファイルは5×5文字の配列を持っているので、クリアが必要です。 'row'変数にはテキストファイルの各行が含まれるため、各行が終了するか、 'row'変数が大きな文字列になるたびにクリアする必要があります。 これを見ても、グリッドを 'List'にして、グリッドに 'string'として各行を追加するだけです。この文字列を後にトラバースすることは、基本的にCharsのListをトラバースすることと同じです。 –