C# - 如何从静态对象创建动态对象?

时间:2014-04-18 15:04:24

标签: c# clone dynamictype

假设有一个类型为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对象中。

4 个答案:

答案 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