簡體   English   中英

C#設置對象參數

[英]C# Setting object parameters

如何設置一個對象的所有屬性等於另一個? 就像在我的示例中一樣,TCar基本上是一輛汽車,如何將共享變量設置為相等? 如果我沒記錯的話,在Java中,我可以輕松做到這一點。

class Car {

}

class TCar : Car {

}

Car car = new Car();
TCar datcar = new TCar();
datcar = car; Error? Isn't the datcar is a 'Car' too?

我不想手動設置所有內容。

您的代碼無效,因為Car不是TCar car = datcarcar = datcar

但是,這可能無法實現您的期望,因為它只會使兩個引用 cardatcar指向同一個TCar對象。

如果要將對象保留為單獨的對象,但要用另一個對象的屬性值更新一個對象的所有屬性,則必須一個個地分配它們。 或者,您可以使用自動完成此操作的AutoMapper

datacarCar ,但具體來說是TCar因此無法設置對car的引用,因為它們在內存中的類型不同。 此外,您正在執行的操作不會設置屬性值,它只會在內存中設置引用(或指針)。

您正在尋找的是Clone到另一種類型。 考慮添加擴展方法來克隆該對象,如下所示:

namespace System
{
    public static class Extensions
    {
        public static TOut Clone<TOut>(this Car input) where TOut : Car
        {
            var o = Activator.CreateInstance(typeof(TOut));
            foreach (var prop in typeof(Car).GetProperties())
            {
                prop.SetValue(o, prop.GetValue(input));
            }
        }
    }
}

因此,您現在可以執行以下操作:

TCar datacar = car.Clone<TCar>();

您可以使用另一個對象的屬性創建一個新對象:

Car car = new Car("jeep");

TCar datCar = new Tcar {
 Brand = car.Brand
};

或者,您可以創建顯式/隱式運算符,或使用諸如AutoMapper的映射工具。

在C#中,您將需要轉換運算符 -並且在您提到的情況下,這將是隱式轉換。

從MSDN引用:“ C#使程序員可以在類或結構上聲明轉換,以便可以將類或結構與其他類或結構或基本類型進行相互轉換。它們將進行轉換。要轉換的參數的類型或轉換結果的類型(但不是兩者)必須是包含的類型。”

它看起來像這樣:

class Car
{
    // ...other members 

    // User-defined conversion from TCar to Car
    public static implicit operator Car(TCar d)
    {
        return new Car(d);
    }
    //  User-defined conversion from Car to TCar
    public static implicit operator TCar(Car d)
    {
        return new TCar(d);
    }
}

來源: http : //msdn.microsoft.com/en-us/library/09479473(v=vs.90).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM