簡體   English   中英

如何將動態值轉換為表達式中的類型值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM