2009-08-04 18 views
8

Estoy trabajando en mi nuevo libro de MVC y, por supuesto, las muestras están todas en C# como de costumbre.¿Hay algo así como un bool nulo en vb.net

Hay una línea de código que dice

public bool? WillAttend { get; set; } 

El autor explica que el signo de interrogación indica que este es un bool anulable (tri-estatal) que puede ser verdadera, falsa. o nulo. (Una nueva convención de C# 3)

¿Vb.net admite cualquier convención como esta? Ciertamente puedo declarar un valor booleano en vb.net y puedo establecerlo explícitamente en Nulo (Nothing en vb.net).

Cual es la diferencia. ¿Hay algo más en C#? Ventajas?

Respuesta

21
  1. bool? es sólo abreviada syntax for a nullable value type: es decir, Nullable<bool>
  2. En VB.NET se puede utilizar cualquiera de ellas: Boolean? o Nullable(Of Boolean).

Puede escribirlo como este con una propiedad respaldo:

Private _willAttend As Nullable(Of Boolean) 
Public Property WillAttend As Nullable(Of Boolean) 
    Get 
     Return _willAttend 
    End Get 
    Set(value As Nullable(Of Boolean)) 
     _willAttend = value 
    End Set 
End Property 

O simplemente utilizar un auto-implemented property así:

Public Property WillAttend As Boolean? 
+0

Gracias por mostrar la declaración de propiedad también ... que haría ha sido la siguiente pregunta. –

39

Se puede declarar un valor anulable 3 maneras en VB:

Dim ridesBusToWork1? As Boolean 
Dim ridesBusToWork2 As Boolean? 
Dim ridesBusToWork3 As Nullable(Of Boolean) 

Lectura adicional: MSDN - Nullable Value Types (Visual Basic).

+13

Oye, ¿nunca supe que podrías agregar el? después del nombre de la variable? ¡Bonito! Aprendí algo nuevo hoy. – BenAlabaster

+0

Gracias por la entrada –

+1

@Seth: Gracias por la salida. ;-) – Kredns

0

Anulable se usa en tipos de valores como ints, bools y etc. que no admiten asignaciones nulas. Esto es generalmente muy útil cuando tus métodos devuelven enteros. Si el resultado de un método no es válido, simplemente puede devolver un conjunto int nullable a nulo en lugar de un entero negativo, que puede terminar siendo un resultado válido a largo plazo. Esa es prácticamente la única ventaja que viene a la mente. Otros han publicado cómo hacer esto en VB.NET. No entraré en eso.

3

Nullables están disponibles desde .NET 2.0. En esa versión, Microsoft implementó Generics (Nullable es un tipo genérico). Desde .NET 3.0, ¿puedes usar el? también en VB.NET (anteriormente solo podías usar Nullable (de Boolean)).

Así como se ha dicho por Lucas Aardvark en .NET 3.0 que son capaces de utilizar 3 declaraciones de nullables, pero en .NET 2.0 sólo 1 siendo

Dim myBool as Nullable(of Boolean) 
Cuestiones relacionadas