tiene varias opciones: operador
(int)
— moldeada. Funciona si el objeto ya es entero en algún nivel en la jerarquía de herencia o si hay una conversión implícita definida.
int.Parse()/int.TryParse()
— Para convertir desde una cadena de formato desconocido.
int.ParseExact()/int.TryParseExact()
— Para la conversión de una cadena en un formato específico
Convert.ToInt32()
— Para convertir un objeto de tipo desconocido. Utilizará una conversión explícita e implícita o una implementación IConvertible si se define alguna.
as int?
— ¿Nota "?". El operador as
es solo para tipos de referencia, y entonces usé "?" para significar un Nullable<int>
. El operador "as
" funciona como Convert.To____()
, pero piensa TryParse()
en lugar de Parse()
: devuelve null
en lugar de arrojar una excepción si la conversión falla.
De estos, yo preferiría (int)
si el objeto es en realidad un número entero en caja. De lo contrario, use Convert.ToInt32()
en este caso.
Tenga en cuenta que este es un muy generales respuesta: Quiero tirar un poco de atención a la respuesta de Darren Clarke, porque creo que hace un buen trabajo frente a los detalles aquí, pero llegué tarde y no fue votado como bien todavíaObtiene mi voto para "respuesta aceptada", de todos modos, para también recomendar (int), para señalar que, si falla, podría funcionar (int)(short)
y, para recomendarlo, verifique su depurador para averiguar el tipo de tiempo de ejecución real.
Encontré un punto que no era realmente un error, pero tal vez simplificaba demasiado las cosas para que alguien pudiera pensar eso. Eliminé esa oración y agregué un enlace a la documentación autorizada. –
¿Funcionará el reparto directo con una conversión implícita? Tenía la impresión de que eso solo haría unboxing estrictamente, no otras conversiones. –
No es exactamente una respuesta, pero lea esto: http://blogs.msdn.com/ericlippert/archive/2009/03/19/representation-and-identity.aspx –