나는 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