[英]How to convert dynamic value to type value in expression
public class Model1 {
public String Value { get; set; }
}
public class Model2 {
public dynamic Value { get; set; }
}
public static Expression<Func<Model2, Model1>> GetExpression() {
return f => new Model1 {
Value = f.Value
};
}
我正在編寫一個GetExpression()
,它將Model2
屬性轉換為Model1
。 說到動態屬性,我嘗試Convert.ToString(f.Value)
或(String)f.Value
但它說
“表達式樹可能不包含動態操作”
任何人都知道在表達式中將動態值轉換為類型值的正確方法是什么?
執行此操作的唯一方法是說服表達式編譯器忽略dynamic
:
return f => new Model1
{
Value = (string)(object)f.Value
};
要么
return f => new Model1
{
Value = Convert.ToString((object)f.Value)
};
除了其他任何東西,還會有隱式動態轉換,這是不受支持的。 這只是做了一個強硬的演員。
不過,坦白說,我不知道是否有在多的價值f.Value
為dynamic
擺在首位 。
您可以將構建Model1
的代碼從Model2
到方法中,並在表達式中使用該方法,如下所示:
private static Model1 FromMolde2(Model2 m2) {
return new Model1 { Value = m2.Value };
}
public static Expression<Func<Model2, Model1>> GetExpression() {
return f => FromMolde2(f);
}
這種方法的一個好處是可以將Model2
屬性復制到Model1
中的代碼可以重用。
另一種可能性是給Model1
一個額外的構造函數,它接受Model2
,但這會在兩個類之間引入一個潛在的不良依賴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.