繁体   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