私は C# の完全な初心者であり、同じメソッドが異なる方法で機能する理由を理解できません。私は単純なスプレッドシート アプリケーションを作成しており、セルのディクショナリを使用しています。キーは文字列名で、値は Cell オブジェクトです。
public struct Cell
{
private string Name { get; }
public Object Content { get; set; }
public Cell(string n, Object o)
{
Name = n;
Content = o;
}
}
ここで、セルの内容を簡単に追加/変更できるようにする必要があるため、次のようにしています。
Dictionary<string, Cell> cells = new Dictionary<string, Cell>();
// Assign new cell to 5.0 & print
cells.Add("a1", new Cell("a1", 5.0));
Console.WriteLine(cells["a1"].Content); // Writes 5
// Assign cell to new content & print
cells.TryGetValue("a1", out Cell value);
value.Content = 10.0;
Console.WriteLine(cells["a1"].Content); // Writes 5
Console.ReadKey();
もちろん、ディクショナリは新しいセルを問題なく作成しますが、TryGetValue を使用すると、取得しようとしている実際のオブジェクトにセルの新しいコンテンツが作成されません。2 番目の出力が 10 になることを期待していました。デバッグでは、手元のセルの参照を取得するのではなく、新しいセルをインスタンス化するようです。
以前に Dictionary を使用したことがあり、TryGetValue を使用して既存のオブジェクトのプロパティを変更したことがあります。ここで 2 つの質問があります。この場合、何が間違っているのでしょうか。また、メソッドが参照を返すかどうかを決定する要因は何ですか?