2012-05-11 15 views
18

En la línea: bool travel = fill.travel.Value; estoy recibiendo el siguiente error:Objeto nullable debe tener un valor?

Nullable object must have a value

y no estoy seguro de por qué. Todo lo que quiero hacer es obtener el valor en la base de datos de viajes que actualmente es falso. Cualquier ayuda sería apreciada.

using (var db = new DataClasses1DataContext()) 
{ 
    var fill = (from f in db.expenseHdrs 
       where f.rptNo == getPkRowReport() 
       select f).FirstOrDefault(); 

    txtReportDesc.Text = fill.description; 
    txtPeriod.Text = fill.period; 
    txtPurpose.Text = fill.purpose; 

    bool travel = fill.travel.Value; 
    chkTravel.Checked = travel 
} 
+0

¿qué 'getPkRowReport' volver? –

+8

Parece que fill.travel es un bool nullable ('bool?'), Y es NULL en la base de datos. – driis

+1

@driis, esa es la respuesta, por lo que es mejor que lo muevas hacia abajo. –

Respuesta

30

Siempre se puede cambiar a

fill.travel.GetValueOrDefault() 

Para proporcionar el valor por defecto (falso), o el valor de la columna booleana de la base de datos. O puede especificar el valor predeterminado con una sobrecarga. De cualquier forma, la nullable actualmente no tiene un valor, por lo que obtienes esa excepción.

3

Usted recibirá una InvalidOperationException si accede a la propiedad Nullable.Value cuando la propiedad HasValue es falsa.

3

Puede comprobar si la variable anulable tiene algún valor como esto antes de que su realidad acceder a su valor

if(fill.travel.HasValue) 
{ 
    bool travel = fill.travel.Value; 
} 
2

El valor procedente de la base de datos es un valor lógico anulable. Cuando llama a Nullable.Value, y el valor es nulo, obtendrá esta excepción. Considere comprobar la propiedad Nullable.HasValue antes de llamar a .Value.

3

Usted está tratando de acceder a la propiedad del objeto inexistente (su fill.travel es nulo, y llamando puntal de ella), puede utilizar el operador se unen (.Net 4.0):

bool travel = fill.travel ?? false; 
1

Null no es falso Consulte la serie de artículos del blog de Eric Lippert sobre esto en: http://blogs.msdn.com/b/ericlippert/archive/2012/03/26/null-is-not-false.aspx

Necesita procesar un resultado nulo en falso, si es así como quiere traducirlo.

Para hacer eso claro, consideran que este código:

bool travel; 
bool? temptravel = fill.travel.Value; 
if(temptravel == true) 
    travel = true; 
else 
    travel = false; 

o simplemente utilizar la solución de Val Bajtín si está utilizando .Net 4

Cuestiones relacionadas