假设有一个类型为A
的静态对象。
class A
{
public string b;
public int c;
public bool d;
public A e;
.
.
.
}
A a = new A(){
b = "string",
c = 12,
d = true
e = new A(){
b = "another string",
c = 23
}
};
我希望深度将此对象克隆到具有其所有属性的dynamic
对象中。
答案 0 :(得分:1)
我将枚举对象的属性(a.GetType()。GetProperties()),在内置类型,结构和类之间进行编程,并使用ExpandoObject来构建动态对象。
答案 1 :(得分:1)
最简单的方法是将类序列化为json并将其反序列化为动态对象。
使用Json.net:
A a = new A()
{
b = "string",
c = 12,
d = true,
e = new A()
{
b = "another string",
c = 23
}
};
var json = JsonConvert.SerializeObject(a); // create a json
dynamic newObj = JsonConvert.DeserializeObject(json);// create a dynamic object
答案 2 :(得分:0)
构建一个复制构造函数:
class A //<-- this class is static?????
{
public string b;
public int c;
public bool d;
public A e;
public A() { } // add default constructor
public A(A a){
b = a.b;
c = a.c;
d = a.d;
if ( a.e != null ) {
e = new A(a.e);
}
}
}
答案 3 :(得分:0)
在C#4.0中,我们有动态的概念,但是如何从静态静态对象创建动态对象?
下面的代码会在运行时生成异常。动态对象来自C#类,但它可以是来自其他语言的对象,通过动态语言运行时(DLR)。关键不在于如何调用静态方法,而是如何调用无法在C#代码中创建的动态对象的静态方法。
类Foo { public static int Sum(int x,int y) { 返回x + y; } }
课程计划 {
static void Main(string[] args)
{
dynamic d = new Foo();
Console.WriteLine(d.Sum(1, 3));
}
}
动态类型被发明为C#和其他编程语言之间的桥梁。还有一些其他语言(例如Java)允许通过对象而不是类型来调用静态方法。
了解更多详情,请访问 enter link description here