Эти две строки делают разные вещи.
Первый создает новый набор, а затем объединяет в него второй набор.
Второй устанавливает ссылку на 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 */ );
Тогда последний лучше, так как первый создает пустой объект перед его заполнением.
Однако, если инициализация пустого класса не требует больших затрат или повторяется много раз, разница не так важна.