kzen.dev
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 frenchie
frenchie
Question

menggabungkan dua objek dalam C#

Saya memiliki model objek MyObject dengan berbagai properti. Pada satu titik, saya memiliki dua instance dari MyObject ini: instance A dan instance B. Saya ingin menyalin dan mengganti properti di instance A dengan properti di instance B jika instance B memiliki nilai non-null.

Jika saya hanya memiliki 1 kelas dengan 3 properti, tidak masalah, saya bisa dengan mudah melakukan hard code (yang saya mulai lakukan). Tetapi saya sebenarnya memiliki 12 model objek yang berbeda dengan masing-masing sekitar 10 properti.

Apa cara yang baik untuk melakukan ini?

33 2012-01-02T15:36:19+00:00 3
Anders Abel
Anders Abel
Pertanyaan edit 2 Januari 2012 в 3:42
Pemrograman
.net
c#
Pertanyaan ini memiliki :value jawaban dalam bahasa Inggris, untuk membacanya masuk ke akun Anda.
Solution / Answer
 Bas
Bas
2 Januari 2012 в 3:41
2012-01-02T15:41:43+00:00
Lebih
Sumber
Sunting
#15091604

Update Gunakan AutoMapper sebagai gantinya jika Anda perlu banyak memanggil metode ini. Automapper membangun metode dinamis menggunakan Reflection.Emit dan akan jauh lebih cepat daripada reflection.'

Anda bisa menyalin nilai properti menggunakan reflection:

public void CopyValues<T>(T target, T source)
{
    Type t = typeof(T);

    var properties = t.GetProperties().Where(prop => prop.CanRead && prop.CanWrite);

    foreach (var prop in properties)
    {
        var value = prop.GetValue(source, null);
        if (value != null)
             prop.SetValue(target, value, null);
    }
}

Saya telah membuatnya generik untuk memastikan keamanan tipe. Jika Anda ingin menyertakan properti privat, Anda harus menggunakan override dari Type.GetProperties(), dengan menentukan binding flags.

 Brad
Brad
Jawaban edit 26 Juni 2018 в 2:47
43
0
Naveen Vijay
Naveen Vijay
21 April 2012 в 5:26
2012-04-21T17:26:09+00:00
Lebih
Sumber
Sunting
#15091606

Saya telah mencoba Merge Two Objects into an Anonymous Type oleh Kyle Finley dan bekerja dengan sempurna.

Dengan TypeMerger penggabungannya semudah

var obj1 = new {foo = "foo"};

var obj2 = new {bar = "bar"};

var mergedObject = TypeMerger.MergeTypes(obj1 , obj2 );

Itu saja Anda mendapatkan objek yang digabungkan, selain itu, ada ketentuan untuk mengabaikan properti tertentu juga. Anda dapat menggunakan hal yang sama untuk MVC3 juga.

 Rob
Rob
Jawaban edit 7 Mei 2017 в 8:25
8
0
Mat&#237;as Fidemraizer
Matías Fidemraizer
2 Januari 2012 в 3:47
2012-01-02T15:47:05+00:00
Lebih
Sumber
Sunting
#15091605

Anda dapat melakukannya dengan menggunakan refleksi, tetapi seperti yang dinyatakan seseorang, itu akan memiliki penalti kinerja.

Karena Anda bekerja dengan desain kelas yang diharapkan, Anda dapat mencapai tujuan yang sama dengan menggunakan metode ekstensi seperti ini:

public static class MyClassExtensions
{
    public static void Merge(this MyClass instanceA, MyClass instanceB)
    {
        if(instanceA != null && instanceB != null)
        {
             if(instanceB.Prop1 != null) 
             {
                 instanceA.Prop1 = instanceB.Prop1;
             }

             if(instanceB.PropN != null) 
             {
                 instanceA.PropN = instanceB.PropN;
             }
    }
}

Dan kemudian, di suatu tempat dalam kode Anda:

someInstanceOfMyClass.Merge(someOtherInstanceOfMyClass);

Pada akhirnya Anda telah memusatkan operasi ini dalam metode ekstensi dan jika Anda menambahkan atau menghapus properti kelas Anda, Anda hanya perlu memodifikasi implementasi metode ekstensi dan Anda akan menyelesaikan semuanya.

2
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
工藤 芳則
Terdaftar 6 hari yang lalu
2
Ирина Беляева
Terdaftar 1 minggu yang lalu
3
Darya Arsenyeva
Terdaftar 1 minggu yang lalu
4
anyta nuam-nuam (LapuSiK)
Terdaftar 1 minggu yang lalu
5
Shuhratjon Imomkulov
Terdaftar 1 minggu yang lalu
ID
JA
© kzen.dev 2023
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi