2010-11-10 20 views
7

Bir sınıfın özelliklerini diğerine kopyalayan bir işlev yazdım, böylece bir nesnenin kopyasını oluşturun..NET: Bir sınıfın özelliklerini kopyalamak için bir sınıf var mı

Yani, myObject ve myOtherObject aynı tipte olan

MyObject myObject = myOtherObject.MyCustomCopy(myObject) 

gibi bir şey. Sanırım yansıma yoluyla ben otomatik olarak bunu yapan bir .NET nesnesi kullanılan geçmişte eminim bascually

myObject.prop1 = myOtherObject.prop1 
myObject.prop2 = myOtherObject.prop2 
myObject.prop3 = myOtherObject.prop3 
return myObject 

yaparak bunu, ama bunu hatırlayamıyorum ... ya da ben hayal olduğunu Böyle bir yöntem var mı?

Evet Otomatik eşleştiricinin farkındayım, ancak (şimdi değil) eminim ki iş yapan bir .NET nesnesi var. Belki de değil! Bu bağlantıdaki

cevap

9

Sen AutoMapper bir göz sürebilir.

+0

Bunun için zaman damgalarını kontrol etmeliydim :) –

5

Bu iş için oluşturulmuş AutoMapper kullanmalısınız.

+0

Bir nesnenin bir kopyasının nasıl oluşturulacağı, bir nesnenin özellik değerlerinin farklı bir nesne nesnesine nasıl kopyalanacağıdır. – Sisyphus

+0

Nesneleri de bu şekilde klonlayabilirsiniz. –

1

Bu kod (listeler, diziler, özel sınıflar) karmaşık bir şey için gidersiniz nasıl emin değil, temel özellik türleri için çalışmalıdır. Çok basit anlamda

public class MyClass 
{ 
    public int A { get; set; } 
    public string B { get; set; } 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    MyClass orig = new MyClass() { A = 1, B = "hello" }; 
    MyClass copy = new MyClass(); 

    PropertyInfo[] infos = typeof(MyClass).GetProperties(); 
    foreach (PropertyInfo info in infos) 
    { 
    info.SetValue(copy, info.GetValue(orig, null), null); 
    } 
    Console.WriteLine(copy.A + ", " + copy.B); 
} 
4
public static class ext 
{ 
    public static void CopyAllTo<T>(this T source, T target) 
    { 
     var type = typeof(T); 
     foreach (var sourceProperty in type.GetProperties()) 
     { 
      var targetProperty = type.GetProperty(sourceProperty.Name); 
      targetProperty.SetValue(target, sourceProperty.GetValue(source, null), null); 
     } 
     foreach (var sourceField in type.GetFields()) 
     { 
      var targetField = type.GetField(sourceField.Name); 
      targetField.SetValue(target, sourceField.GetValue(source)); 
     } 
    } 
} 
+0

Yukarıda bahsedilen AutoMapper çok daha güçlü, ancak benimki gibi basit kullanım durumları için, bu daha kolay ve daha hızlı koşmak için daha hızlı. Teşekkürler! –

0

: bir başlangıç ​​olsa noktası olmalı bir sınıfın bir nesnesi oluştururken biz C# .NET ie referans tiplerini Sınıfları biliyor olduğundan böyle

Customer C1=new Customer(); 
C1.Id=1; 
C1.Name="Rakesh"; 
olarak

Daha sonra C1 (Referans değişkeni) bellek yığında saklanır ve yeni Müşteri() Heap'ta saklanır.

Dolayısıyla biz aşağıda gibi bir şey yapabilirsiniz temelde sorudur başka sınıfa bir sınıf kopyaladığınızda:

Customer C2=C1; 

C2 içine C1 Referans değişkeni kopyalar yukarıda yaparak Ama Yığın ve Yığın hakkında yazdım C2 referans değişkeni kullanarak çünkü sen o kadar "Mukesh" değiştirildiğinde göreceksiniz erişime C1.Name çalışacağız eğer C1 ve C2 hem

C2.Id=1; 
C2.Name="Mukesh"; 

Şimdi HEAP.Something Like aynı nesneye işaret olmanın nesne özelliklerini değiştirebilirsiniz .

İlgili konular