Solución:
En primer lugar, debe verificar el tipo de su valor. Puedes hacerlo llamando obj.GetType()
método (ya sea en su código directamente o en la ventana Inmediato).
Si esto es int
entonces puedes hacer:
uint u = (uint) (int) obj;
Tenga en cuenta que se diferencia de su elenco porque yesos para int
y luego convierte para uint
mientras intentabas emitir para uint
. int
No puede ser enviado a uint
y es por eso que obtienes el InvalidCastException
. int
puede ser solo convertido para uint
. Es confuso que ambos conversión y emitir los operadores tienen el mismo aspecto en el código: u = (uint) x
.
Lo más fácil que puede hacer es llamar a un método específico desde Convert
clase:
uint u = Convert.ToUInt32(x);
El problema es ese int
se almacena como object
. Int
deriva del objeto pero uint
no deriva de int
entonces no puedes lanzar int
almacenado como object
para uint
. Primero tienes que lanzarlo a int
y luego a uint
porque ese elenco es válido. Inténtalo tú mismo:
object o = 5;//this is constant that represents int, constant for uint would be 5u
uint i = (uint)o;//throws exception
Pero esto funciona:
object o = 5;
int i = (int)o;
uint j = (uint)i;
o
object o = 5;
uint i = (uint)(int)o; //No matter how this looks awkward