TRYCAST NUMA CLASSE GENÉRICA
Olá amigos, beleza?
Estou com uma classe abstrata genérica, que tem a sua assinatura nessa forma:
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:
Mas infelizmente, isso não funciona. O TryCast aparentemente, só funciona para objetos, mas não para instâncias.
Também tentei dessa forma:
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!
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!
If Not CType(valor, T) Is Nothing Then
End If
If Not DirectCast(valor, T) Is Nothing Then
End If
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!
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!
http://www.vbmania.com.br/index.php?modulo=forum&metodo=abrir&id=435984
Já tentou usar o Reflection? Se você precisa saber o tipo exato, o método [Ô]GetType[Ô], vai ajudar muito...
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!
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