Domanda

Esiste una differenza (prestazioni, sovraccarico) tra questi due modi di inizializzare un oggetto:

MyTypedDataSet aDataSet = new MyTypedDataSet();
aDataSet .Merge(anotherDataSet);
aDataSet .Merge(yetAnotherDataSet);

E

MyTypedDataSet aDataSet = anotherDataSet;
aDataSet .Merge(yetAnotherDataSet);

Quale consigli?

È stato utile?

Soluzione

Anche se Keith ha ragione, suppongo che l'esempio sia stato semplicemente scelto male.In generale, è meglio inizializzare l'oggetto “giusto” dall'inizio e non costruisci un oggetto intermedio e vuoto come nel tuo caso.Due ragioni:

  1. Prestazione.Questo dovrebbe essere ovvio:La creazione di oggetti costa tempo, quindi creare meno oggetti è meglio.
  2. Tanto ancora più importante, tuttavia, afferma meglio il tuo intento.In genere lo fai non intendono creare oggetti senza stato/vuoti.Piuttosto, intendi creare oggetti con uno stato o un contenuto.Fallo.Non c'è bisogno di creare un temporaneo inutile (perché vuoto).

Altri suggerimenti

Queste due linee fanno cose diverse.

Il primo crea un nuovo set e poi vi unisce un secondo set.

Il secondo imposta il riferimento ds in modo che punti al secondo set, quindi:

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

Ok, supponiamo che quello che intendevi fosse:

MyClass o1 = new MyClass();
o1.LoadFrom( /* some data */ );

//vs

MyClass o2 = new MyClass( /* some data */ );

Allora è meglio quest'ultimo, poiché il primo crea un oggetto vuoto prima di popolarlo.

Tuttavia, a meno che l'inizializzazione di una classe vuota non abbia un costo elevato o venga ripetuta un gran numero di volte, la differenza non è così importante.

Il tuo secondo esempio sì non creare un nuovo set di dati.È solo un secondo riferimento a un set di dati esistente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top