次の点を考慮してください。
public class Foo
{
public List<int> ListProp { get; set; } = new List<int>();
public int[] ArrayProp { get; set; } = new int[3];
}
public static void Main()
{
new Foo
{
// This works, but does not call the setter for ListProp.
ListProp = { 1, 2, 3 },
// This gives a compiler error: 'int[]' does not contain a
// definition for 'Add' and no extension method 'Add' accepting
// a first argument of type 'int[]' could be found (are you
// missing a using directive or an assembly reference?)
ArrayProp = { 4, 5, 6 }
};
}
何が起こっているのか理解したいと思っています。ListProp セッターは呼び出されません。また、ArrayProp を割り当てようとするコンパイラ エラーは、内部的に、この割り当てが "Add" メソッドを呼び出そうとしていることを示唆しています。
PS: 明らかに、このようにコードを動作させることができます:ArrayProp = new int[] { 4, 5, 6 }
しかし、それは私の好奇心を満足させません :)