[英]C# - How to create a dynamic object from a static object?
假設有一個類型為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
對象中。
我將枚舉對象的屬性(a.GetType()。GetProperties()),在內置類型,結構和類之間進行轉換,並使用ExpandoObject構建動態對象。
最簡單的方法是將類序列化為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
構建一個拷貝構造函數:
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);
}
}
}
在C#4.0中,我們有動態的概念,但是如何從靜態靜態對象創建動態對象?
下面的代碼將在運行時生成異常。 動態對象來自C#類,但它可以是來自其他語言的對象,通過動態語言運行時(DLR)。 關鍵不在於如何調用靜態方法,而是如何調用無法在C#代碼中創建的動態對象的靜態方法。
class Foo {public static int Sum(int x,int y){return x + y; }}
課程{
static void Main(string[] args)
{
dynamic d = new Foo();
Console.WriteLine(d.Sum(1, 3));
}
}
動態類型被發明為C#和其他編程語言之間的橋梁。 還有一些其他語言(例如Java)允許通過對象而不是類型來調用靜態方法。
有關詳細信息,請訪問此處輸入鏈接說明
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.