我有一個假裝是int的類,所以它重載了各種運算符;如何在使用Reflection.SetValue時提供轉換?
public class MyId
{
int value;
public virtual int Value
{
get { return this.value; }
set { this.value = value; }
}
public MyId(int value)
{
this.value = value;
}
public static implicit operator MyId(int rhs)
{
return new MyId(rhs);
}
public static implicit operator int(MyId rhs)
{
return rhs.Value;
}
}
然而,當我使用像
PropertyInfo.SetValue(myObj, 13, null)
OR
MyId myId = 13;
int x = Convert.ToInt32(myId);
IConvertible iConvertible = x as IConvertible;
iConvertible.ToType(typeof(MyId), CultureInfo.CurrentCulture);
我得到無效的轉換代碼。我感到困惑,這兩個調用似乎試圖調用int上的轉換,因爲int不理解類型MyId(即使所有的賦值操作符都在那裏)。任何想法的解決辦法,我敢肯定我必須失去一些愚蠢的東西?
您是否嘗試過實施'IConvertible'? – mattytommo
到目前爲止描述的內容正是Int32所做的......提供了一個圍繞本機32位整數的對象框。我假設你的用例更多,但如果不是的話,只需使用Int32即可。 –
我已經在myid上完全實現了icovertable,但它看起來像是在int32上調用它,所以我不能影響它。 – pkr2000