TRYCAST NUMA CLASSE GENÉRICA

DS2T 02/03/2016 15:26:58
#458508
Olá amigos, beleza?

Estou com uma classe abstrata genérica, que tem a sua assinatura nessa forma:

Public MustInherit Class CampoComparacao(Of T)


Só que em determinada função pública na classe, eu preciso fazer uma verificação de conversão (Vê se um parâmetro da função, do tipo Object, pode ser convertida para o tipo T).

Eis um pedaço da função:

        Public Function Valida(valor As Object, nomeCampo As String) As Resultado Implements IParametroValidator.Valida
Dim tipoObjeto As Type = GetType(T)

If Not TryCast(valor, tipoObjeto) Is Nothing Then


Mas infelizmente, isso não funciona. O TryCast aparentemente, só funciona para objetos, mas não para instâncias.

Também tentei dessa forma:

 If Not TryCast(valor, T) Is Nothing Then


Tentando colocar o tipo genérico direto na função, mas também apontou erro, dizendo que esse tipo genérico não pode estar na função.

Alguém sabe se existe alguma forma de remediar isso?

Obrigado a todos!
GUIMORAES 02/03/2016 15:56:01
#458510
Resposta escolhida
  If Not CType(valor, T) Is Nothing Then

End If

If Not DirectCast(valor, T) Is Nothing Then

End If

DS2T 02/03/2016 16:23:42
#458512
Oi Guimoraes123.

O problema de usar esses dois métodos é que eles não retornam Nothing caso a conversão seja inválida. Ele dispara uma exceção. E eu não queria tratar esse tipo de erro...
A vantagem do TryCast é que ele retorna Nothing caso não dê pra converter e ainda é mais leve.

Mas agradeço a ajuda!
Caso alguém mais souber, fico agradecido!
JABA 02/03/2016 18:23:19
#458517
http://www.vbmania.com.br/index.php?modulo=forum&metodo=abrir&id=435984
KERPLUNK 02/03/2016 18:25:59
#458518
Já tentou usar o Reflection? Se você precisa saber o tipo exato, o método [Ô]GetType[Ô], vai ajudar muito...
DS2T 03/03/2016 17:56:14
#458599
Jaba

Então cara, meu problema é diferente. Porque eu não preciso realmente converter o objeto. Eu só preciso saber se eles podem ser convertidos. Preciso comparar o tipo genérico com um objeto Object qualquer. No exemplo, ele está instanciando uma nova classe pelo Activator. Porém, o TryCast não aceita parâmetros GetType, nem tipos genéricos, diferente do CreateInstance. Mas obrigado.

Kerplunk

Então, saber se é do tipo exato não serviria ao meu propósito. Porque se minha classe genérica tiver T como Decimal e eu receber um Integer, como são estruturas diferentes, o tipo não iria bater, mesmo sendo perfeitamente possível a conversão.

Minha Solução:

Usei o CType com um bloco Try mesmo... foi o jeito.


Obrigado a todos!
Tópico encerrado , respostas não são mais permitidas