つい最近、C# で不可解なことが起こりました。コードベースにはTreeNode
クラスがあります。Nodes
一部のコードを変更したときに、プロパティに変数を割り当てることができないことがわかりました。よく調べてみると、プロパティが読み取り専用であり、この動作が想定されていることが明らかになりました。
奇妙なことに、私たちのコード ベースはそれまで常に何らかの匿名型のNodes
プロパティへの割り当てに依存しており、コンパイルして完全に機能していました。
要約するAddSomeNodes
と、そもそもなぜ割り当てが機能したのですか?
using System.Collections.Generic;
namespace ReadOnlyProperty
{
public class TreeNode
{
private readonly IList<TreeNode> _nodes = new List<TreeNode>();
public IList<TreeNode> Nodes
{
get { return _nodes; }
}
}
public class TreeBuilder
{
public IEnumerable<TreeNode> AddSomeNodes()
{
yield return new TreeNode
{
Nodes = { new TreeNode() }
};
}
public IEnumerable<TreeNode> AddSomeOtherNodes()
{
var someNodes = new List<TreeNode>();
yield return new TreeNode
{
Nodes = someNodes
};
}
}
}