Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

805
Visualizações
¿Con CType Int32? a Int64? - System.InvalidCastException: la conversión especificada no es válida

¿Por qué CType se queja ( InvalidCastException ) acerca de tomar un objeto (que es realmente un Int32? ) y convertirlo en un Int64? ?

Descubrí que CTypeDynamic no tiene ningún problema (sin embargo, es tangencial, ya que estoy enfocado en Ctype ).

Aquí hay una muestra de código para reproducir el escenario.

 Module Module1 Sub Main() Dim i As Int32? = 1234567891 'manual nullable -> non nullable -> non nullable -> nullable 'per https://stackoverflow.com/a/10065482/392175 Dim iNotNullable As Int32 = i.Value Dim biNotNullable As Int64 = iNotNullable Dim bi As Int64? = biNotNullable Console.WriteLine($"---Manual results---") Console.WriteLine($"i={i}") Console.WriteLine($"bi={bi}") 'CType investigation bi = Module1.xCType(Of Int64?)(i) Console.WriteLine($"---CType results---") Console.WriteLine($"i={i}") Console.WriteLine($"bi={bi}") Console.ReadLine() End Sub Public Function [xCType](Of T)(ByVal obj As Object) As T If obj Is Nothing Then Return Nothing If IsDBNull(obj) Then Return Nothing Return obj 'fails Return CType(obj, T) 'fails Return CTypeDynamic(Of T)(obj) 'succeeds End Function End Module
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Tiene dos problemas, ambos relacionados con información de tipo insuficiente disponible en tiempo de compilación.

  1. .NET no se especializa en métodos genéricos. Una compilación, basada en las restricciones, tiene que funcionar para cada valor de tiempo de ejecución del parámetro genérico.

    En el momento en que el compilador ve xCType , no sabe que T es un tipo anulable, por lo que no puede elegir la regla para la conversión anulable ( S? a S a T a T? ) e incluso si se limita a un tipo anulable genérico la conversión intermedia ( S a T ) seguirá fallando porque es específica del tipo, no genérica.

  2. obj tiene Object de tipo estático, por lo que nuevamente el compilador no sabe que el valor real pasado será anulable y no puede seleccionar la secuencia de conversión anulable. Y nuevamente, la conversión intermedia en la secuencia ( S a T ) no se puede encontrar cuando falta la información de tipo de tiempo de compilación.

CTypeDynamic supera estos dos problemas al observar el tipo de tiempo de ejecución en lugar del tipo de tiempo de compilación.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda