这可能是基本问题,但任何人都可以解释这是如何工作的。下面的代码只是示例,但实时这种情况可能会发生在不同的地方。例如:在为具有 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 是否可以。