visual trycast net long example convertir convert cint cdbl cdate vb.net casting ctype

vb.net - trycast - vb net convertir string en long



Casting en VB.NET (5)

Me gustaría poder emitir un valor dinámicamente cuando el tipo se conoce solo en tiempo de ejecución. Algo como esto:

myvalue = CType(value, "String, Integer or Boolean")

La cadena que contiene el valor de tipo se pasa como un argumento y también se lee desde una base de datos, y el valor se almacena como una cadena en la base de datos.

es posible?


Bueno, ¿cómo se determina qué tipo se requiere? Como dijo Joel, este es probablemente un caso para los genéricos. La cuestión es que, dado que no se conoce el tipo en el momento de la compilación, no se puede tratar el valor devuelto de todos modos, por lo que el fundido realmente no tiene sentido aquí.


Tal vez en lugar de lanzar dinámicamente algo (que no parece funcionar) podrías usar el reflejo en su lugar. Es bastante fácil obtener e invocar métodos o propiedades específicos.

Dim t As Type = testObject.GetType() Dim prop As PropertyInfo = t.GetProperty("propertyName") Dim gmi As MethodInfo = prop.GetGetMethod() gmi.Invoke(testObject, Nothing)

No es bonito, pero podrías hacer algo de eso en una sola línea en lugar de tantas.


Dim bMyValue As Boolean Dim iMyValue As Integer Dim sMyValue As String Dim t As Type = myValue.GetType Select Case t.Name Case "String" sMyValue = ctype(myValue, string) Case "Boolean" bMyValue = ctype(myValue, boolean) Case "Integer" iMyValue = ctype(myValue, Integer) End Select

Es un poco hacky pero funciona.


Esta es la forma más corta de hacerlo. Lo he probado con varios tipos.

Sub DoCast(ByVal something As Object) Dim newSomething = Convert.ChangeType(something, something.GetType()) End Sub


Claro, pero myvalue tendrá que definirse como de tipo Object , y no necesariamente quiere eso. Tal vez este sea un caso mejor atendido por los genéricos.

¿Qué determina qué tipo se usará?