这两种初始化对象的方法之间是否存在差异(性能,开销):
MyTypedDataSet aDataSet = new MyTypedDataSet();
aDataSet .Merge(anotherDataSet);
aDataSet .Merge(yetAnotherDataSet);
和
MyTypedDataSet aDataSet = anotherDataSet;
aDataSet .Merge(yetAnotherDataSet);
你推荐哪一个?
答案 0 :(得分:5)
这两行做不同的事情。
第一个创建一个新集合,然后将第二个集合合并到其中。
第二个将ds引用设置为指向第二个集合,因此:
MyTypedDataSet ds1 = new MyTypedDataSet();
ds1.Merge(anotherDataSet);
//ds1 is a copy of anotherDataSet
ds1.Tables.Add("test")
//anotherDataSet does not contain the new table
MyTypedDataSet ds2 = anotherDataSet;
//ds12 actually points to anotherDataSet
ds2.Tables.Add("test");
//anotherDataSet now contains the new table
好的,让我们假设你的意思是:
MyClass o1 = new MyClass();
o1.LoadFrom( /* some data */ );
//vs
MyClass o2 = new MyClass( /* some data */ );
然后后者更好,因为前者在填充之前创建了一个空对象。
然而,除非初始化空课程成本高或重复多次,否则差异并不重要。
答案 1 :(得分:4)
您的第二个示例不创建新数据集。它只是现有数据集的第二个引用。
答案 2 :(得分:1)
虽然基思是对的,但我认为这个例子很糟糕。通常,最好从头开始初始化为“右”对象,而不构造一个中间的空对象,就像你的情况一样。有两个原因: