• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Klonowanie wartosci obiektu

Object Storage Arubacloud
0 głosów
70 wizyt
pytanie zadane 15 stycznia 2019 w C# przez NoButNo1 Nowicjusz (180 p.)

Witam.

mam na przykład dwie klasy:


public class BazaDanych
{
   public string Imie {get; set;}
   public string Nazwisko {get; set;}
   public enum MojTyp MojTyp {get; set;}
}

public class ModelWidoku
{
   public string Imie {get; set;}
   public string Nazwisko {get; set;}
   public enum MojTyp MojTyp {get; set;}
}

W kontrolerze oczywiscie musze poprzypisywac wszystkie dane typu: 

new BazaDanych() { imie = model.imie }

aby dodac nowe rekordy do bazy. W jaki sposob moge pominac żmudne przypisywanie wartości z osobna jeśli klasy sa identyczne? W rzeczywistości klasy mam spore i nie bardzo widze taki sposób.

komentarz 18 stycznia 2019 przez NowyUrzydgownig Mądrala (5,090 p.)
Możesz pobrać dowolną bibliotekę mapującą. To co chcesz zrobić nazywa się mapowaniem.

1 odpowiedź

0 głosów
odpowiedź 17 stycznia 2019 przez MikDal Mądrala (5,660 p.)

Tutaj przychodzi z pomocą magiczne narzędzie jakim jest refleksja!

Poniższy kod kopiuje wartości z obiektu źródłowego do docelowego pod warunkiem, że mają tą samą nazwę i są tego samego typu.

public static void CopyPropertiesTo<T, TU>(this T source, TU dest)
{
    List<PropertyInfo> sourceProps = typeof(T).GetProperties().Where(x => x.CanRead).ToList();
    List<PropertyInfo> destProps = typeof(TU).GetProperties().Where(x => x.CanWrite).ToList();

    foreach (PropertyInfo sourceProp in sourceProps)
    {
        PropertyInfo p = destProps.FirstOrDefault(x => x.Name == sourceProp.Name);
        if (p is null) continue;

        if (p.CanWrite)
        {
            p.SetValue(dest, sourceProp.GetValue(source, null), null);
        }
    }
}

Zwróć uwagę, że jest to metoda typu rozszerzenie (extension), jak będziesz miał z nią problem, to usuń słówko this z pierwszej linijki.

P.S. Metodę tę znalazłem kiedyś gdzieś na StackOverflow.

Podobne pytania

0 głosów
2 odpowiedzi 235 wizyt
pytanie zadane 20 października 2021 w C# przez kuba412 Początkujący (310 p.)
0 głosów
1 odpowiedź 509 wizyt
0 głosów
1 odpowiedź 183 wizyt
pytanie zadane 27 lutego 2021 w C# przez michal100032 Początkujący (390 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...