請考慮下面的MyDecimal
類。在C#
,我們可以歸功於其轉換爲整數隱式decimal
操作:在表達式樹中顯式強制轉換?
int i = (int)new MyDecimal(123m);
如何在表達式樹產生的等效代碼?
當使用Expression.Convert(.NET 4.5.1
)時,立即失敗,出現No coercion operator is defined between types 'System.Int32' and 'MyDecimal'
。它似乎只考慮隱式演員操作。
try
{
var param = Expression.Parameter(typeof(int), null);
var convert = Expression.Convert(param, typeof(MyDecimal));
}
catch (Exception ex)
{
}
MyDecimal
類:
Expression<Func<MyDecimal,int>> convert = m => (int)m;
使用的工具鏈接LinqPad我們可以檢查:
public class MyDecimal
{
private readonly decimal value;
public MyDecimal(decimal value)
{
this.value = value;
}
public static implicit operator decimal(MyDecimal myDecimal)
{
return myDecimal.value;
}
public static implicit operator MyDecimal(decimal value)
{
return new MyDecimal(value);
}
}
'趕上(例外){}' - 請,請,不這樣做。 – Heinzi
@ Heinzi - 是catch(Exception){}'any better <):O) –
我認爲@Heinzi的意思是你應該記錄異常的細節:例如catch(Exception ex){Console.Write(ex); }'。 –