Non so se questo è ciò che dovresti fare necessariamente, ma ecco qualcosa che potresti fare: Crea un SetAll o SetMany o qualsiasi altro metodo in cui passi in un'altra istanza della tua classe (fonte). Controllare ciascuna proprietà e se non è nulla, si imposta il valore della proprietà dell'oggetto di destinazione sul valore della proprietà dell'oggetto di origine. Nota che questa tattica dipenderà dai tipi nullable e presuppone che tu possa ignorare i valori nulli passati in un nuovo metodo setter. Ecco una illustrazione:
using System;
namespace BlogPartialUpdateTrick
{
public class SomeClass
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int? HeightInches { get; set; }
public DateTime? Dob { get; set; }
public void SetAll(SomeClass source)
{
this.FirstName = source.FirstName ?? this.FirstName;
this.LastName = source.LastName ?? this.LastName;
this.HeightInches = source.HeightInches ?? this.HeightInches;
this.Dob = source.Dob ?? this.Dob;
}
public override string ToString()
{
return String.Format("fn: {0}, ln: {1}, height: {2}, DOB: {3}", FirstName ?? String.Empty, LastName ?? String.Empty,
HeightInches.HasValue ? HeightInches.Value.ToString() : "null", Dob.HasValue ? Dob.Value.ToShortDateString() : "null");
}
}
}
In questo primo esempio di codice, abbiamo la mia classe spiffy SomeClass. Ha 4 proprietà, tutte sono annullabili. La parte degna di nota di questa classe è SetAllMethod dove posso passare in un oggetto sorgente che è anche di tipo SomeClass. Imposta i valori di proprietà di questa istanza sui valori passati nel parametro source, ma solo se non sono nulli. Ecco un codice di 2 ° trafiletto in cui sto usando questa roba:
using System;
using System.Windows.Forms;
namespace BlogPartialUpdateTrick
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var destination = new SomeClass() { FirstName = "Freddy", LastName = "Fingers", Dob = DateTime.Parse("01/01/1970"), HeightInches = 72 };
var source = new SomeClass() { FirstName = null, LastName="Flippers", Dob = null, HeightInches = 80 };
destination.SetAll(source);
MessageBox.Show(destination.ToString());
}
}
}
Creare un oggetto di destinazione, un oggetto di origine, chiamare il nuovo metodo, voilà! output è questo:
"fn: Freddy, ln: Flippers, altezza: 80, Data di nascita: 1/1/1970"
Utilizzare semplicemente Sovraccarico, creare lo stesso metodo con i due campi per aggiornare come parametri il metodo di istanza – Coder1409
@ Coder1409 o renderlo metodo statico ?? perché se decido di creare un sovraccarico con parametri quei parametri sono già parte dell'oggetto !! –
È necessario utilizzare il metodo esistente. Può sembrare che sia troppo lavoro, ma in realtà è meno. La tua classe racchiude un concetto e lo stato di quell'oggetto cambia anche se si modifica una singola proprietà. L'esecuzione dell'aggiornamento utilizzando tutte le proprietà ti impone di conoscerli tutti prima dell'aggiornamento e questa è una buona restrizione. – boosts