Nie wiem, czy to właśnie powinieneś zrobić, ale jest coś, co możesz zrobić: Utwórz SetAll lub SetMany lub dowolną metodę, w której przechodzisz w innej instancji klasy (źródło). Sprawdź każdą właściwość, a jeśli ma wartość inną niż null, ustaw wartość właściwości obiektu docelowego na wartość właściwości obiektu źródłowego. Zauważ, że ta taktyka będzie zależeć od typów nullable i zakłada, że możesz zignorować wartości null przekazane do nowej metody ustawiającej. Oto ilustracja:
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");
}
}
}
W tej pierwszej próbce kodu, mamy moją klasę klastrową SomeClass. Ma 4 właściwości, z których wszystkie są zerowe. Godną uwagi częścią tej klasy jest metoda SetAllMethod, w której mogę przekazać obiekt źródłowy, który jest również typu SomeClass. Ustawia wartości właściwości tej instancji na wartości przekazane w parametrze źródłowym, ale tylko wtedy, gdy mają wartość inną niż null. Oto 2nd kod krótką informację gdzie używam tej rzeczy:
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());
}
}
}
Tworzenie obiektu docelowego, obiekt źródłowy, wywołać nową metodę, voila! Wyjście to:
"fn: Freddy, LN: Płetwy, wysokość: 80, DOB: 01/01/1970"
Po prostu użyć przeciążenia, utwórz tę samą metodę z dwoma polami, aby zaktualizować parametry jako metodę instancji – Coder1409
@ Coder1409 lub uczynić ją metodą statyczną? ponieważ jeśli zdecyduję się na stworzenie przeciążenia z parametrami, to te parametry są już częścią obiektu !! –
Powinieneś użyć istniejącej metody. Może się wydawać, że to za dużo pracy, ale w rzeczywistości jest mniej. Twoja klasa zawiera koncepcję, a stan tego obiektu się zmienia, nawet jeśli zmienisz jedną właściwość. Wykonanie aktualizacji przy użyciu wszystkich właściwości wymusi zapoznanie się z nimi przed aktualizacją i jest to dobre ograniczenie. – boosts