基本的な質問かもしれませんが、これがどのように機能するかを誰かが説明できますか? 以下のコードは単なる例ですが、リアルタイムではさまざまな場所でこのシナリオが発生する可能性があります。例: Orders プロパティを持つ Customer のような複雑なオブジェクトの DTO を作成するとき。Orders (=List) は Customer のコンストラクターでインスタンス化する必要がありますか、それともクエリの結果またはストアド プロシージャに直接割り当てる必要がありますか。
List<string> list1 = new List<string>()
{
"One", "Two","Three"
};
List<string> list2 = new List<string>();
list2 = list1;
foreach (var s in list2)
Console.WriteLine(s);
List<string> list3 = list1;
if (list3 != null) //is this the only difference
{
foreach (var s in list3)
Console.WriteLine(s);
}
ILコードをチェックしてみましたが、自明ではありませんでした。
IL_0031: stloc.0
IL_0032: newobj instance void class [mscorlib]System.Collections.Generic.List`1<string>::.ctor()
IL_0037: stloc.1
IL_0038: ldloc.0
IL_0039: stloc.1
IL_003a: ldloc.0
IL_003b: stloc.2
IL_003c: nop
IL_003d: ldloc.1
IL_003e: callvirt instance valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator<!0> class [mscorlib]System.Collections.Generic.List`1<string>::GetEnumerator()
IL_0043: stloc.s CS$5$0000
紛らわしい例を投稿して申し訳ありません。以下は実際のシナリオです
DTO:
public class CustomerBO
{
public CustomerBO()
{
Orders = new List<OrderBO>();
}
List<OrderBO>() Orders { get; set;}
//other properties of customer
}
今DAL層で:
objCustomer.Orders = Repository.GetAll<OrderBO>("dbo.GetOrdersList");
私の質問は、CustomerBO コンストラクターで Orders オブジェクトを初期化 (または) スキップして、プレゼンテーション層で null をチェックしても問題ないでしょうか。