什么相当于C#中的Javascript的Object.assign()

时间:2016-11-03 13:38:05

标签: c#

如果我有C#类

public class Foo
{
    public int? a { get; set; }
    public int? b { get; set; }
}

该类的两个实例

var foo1 = new Foo() { a = 1 };
var foo2 = new Foo() { b = 1 };

如何从两个对象复制值以创建包含Foofoo1值的foo2的新实例?

在Javascript中,这就像

一样简单
var foo3 = Object.assign({}, foo1, foo2);

4 个答案:

答案 0 :(得分:4)

你可以创建一个通过反射合并对象的方法。但要注意,这很慢,通常不能在C#中使用。

必须注意跳过“空”属性。在您的情况下,这些是值类型。在我的示例实现中,如果它是该类型的默认值(对于int,这是0),则跳过每个属性:

%~fF

用法:

%

答案 1 :(得分:2)

没有直接的方法,但你可以通过这种方式满足你的要求。

var foo3 = new Foo() {a = foo1.a, b = foo2.b };

答案 2 :(得分:0)

Vivek的答案是正确的。因为Object.Assign是较大的继承与组合讨论的一部分。这在javascript中并不是那么简单,你需要Object.Assign,但是在C#中你可以通过实例化它并使它成为属性来在你自己的类中组成一个类。你真的这么做。

Javascript带有原型继承,你真的只是链接对象。因此,那里不存在继承(经典)。

观看此视频,非常具有启发性: Inheritance vs Composition

答案 3 :(得分:-3)

using Newtonsoft.Json;
.
.
.

var newFoo = JsonConvert.DeserializeObject<Foo>(JsonConvert.SerializeObject(oldFoo));

的问候, 奥利