2010-08-18 52 views
7

He usado C# antes. Sin embargo, después de unirme a una nueva compañía, necesito escribir vb.net. Sin embargo, me resulta muy difícil escribirlo. Porque descubrí que vb.net no tiene un estilo fuerte. ¿Realmente no es de tipo fuerte? O cualquier configuración para eso? Aquí hay ejemplos.VB.NET de tipo débil? ¿de tipo fuerte?

If (Me.Check1() And Me.Check2()) Then 

Desde mi conocimiento de C#, una vez Me.Check1() vuelve falsa, Me.Check2() no se ejecutará. Sin embargo, estaba equivocado. And es para operaciones bit a bit. Debería usar AndAlso para operaciones booleanas. Lo que debe ser

If (Me.Check1() AndAlso Me.Check2()) Then 

El problema es que If (Me.Check1() And Me.Check2()) Then sigue siendo válido y no hay error de compilación. Realmente quiero saber si puedo verificar esas operaciones "inapropiadas".

And y AndAlso es solo uno de los casos.

A veces, tengo que hacer caso omiso de las comparaciones de cadenas de casos. Sin embargo, todos cometemos errores. A veces, lo hice

If (String.Compare(Me.string1, Me.string2, True)) Then 

Creo que todo el mundo conoce el problema. Debe ser

If (String.Compare(Me.string1, Me.string2, True) = 0) Then 

Sin embargo, todavía no puedo verificar dicho caso durante la compilación.

Me encanta C# porque nos ayuda a encontrar muchos problemas durante la compilación. Sin embargo, VB.NET me confunde mucho y se deben determinar muchos errores durante el tiempo de ejecución y las pruebas.

Un ejemplo más es que

Public Sub MySub(ByVal obj as Object) 
    Console.WriteLine(obj.MyProperty) 
End Sub 

En vb.net, este tipo de declaraciones sigue siendo válida. ¿Por qué? ¿Por qué? ¿Por qué? ¿Alguien sabe cómo usar vb.net como C#?

+4

Option Strict On –

+1

Ninguno de los ejemplos ilustran la tipificación realmente débil. Tal vez digitación dinámica. – recursive

+0

Sé que esto es antiguo, pero creo que este comentario es relevante. El OP está bajo un concepto erróneo acerca de los operadores booleanos y bit a bit. VB funciona exactamente de la misma manera que C# en ese sentido. En C# tiene el operador '&&' para cortocircuitar operaciones booleanas y usted tiene el operador '&' para operaciones booleanas sin cortocircuito y operaciones bit a bit. Son 100% análogos a 'AndAlso' y' And' en VB. Lo mismo ocurre con '||' y '|' en C# y 'OrElse' y' Or' en VB. – jmcilhinney

Respuesta

11

VB.Net tiene modos de escritura fuertes y débiles. Se controla a través de la opción Estricto. Esto se puede configurar a nivel de proyecto o archivo fuente.

' Enable VB.Net strong typing 
Option Strict On 

' Enable VB.Net weak/dynamic typing 
Option Strict Off 
+2

wow ... muchas gracias !!! Una vez que lo enciendo, más de 1000 errores de compilación. jajaja ~ ¡Realmente gracias! –

+0

Una pregunta más, ¿sabes cómo hacer un 'IIf' fuerte-tipado? En C#, el operador '?:' Tiene caracteres fuertes. –

+3

Si está usando Visual Studio 2008, use 'If' en lugar de' IIf' IIRC – JaredPar

0

poco me golpeó el botón Option Strict en un proyecto de vb.net mayor y pasó varias horas fijación de errores de tipo, pero valió la pena. Asegúrese de tener mucho cuidado en DateTime para encadenar y enlodecer las conversiones DateTime. Tuve varias instancias de "12:00:00 AM" añadidas al final de los cuadros de texto que causarían problemas con la antigua base de código.

Una vez que los errores están claros, puede activar Option Infer para que Dim funcione como la var de C#, y no tiene que escribir explícitamente todas sus consultas de Linq.

(yo hubiera hecho este comentario, pero parece que necesito más puntos, lo siento)

Cuestiones relacionadas