Sur la ligne: bool travel = fill.travel.Value;
j'obtiens l'erreur suivante:
L'objet nullable doit avoir une valeur
et je ne sais pas pourquoi. Tout ce que je veux, c'est obtenir la valeur fausse dans la base de données des voyages. Toute aide serait appréciée.
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
}
Vous pouvez toujours passer à
fill.travel.GetValueOrDefault()
Fournir la valeur par défaut (false) ou la valeur de la colonne booléenne de la base de données. Ou vous pouvez spécifier la valeur par défaut avec une surcharge. Quoi qu'il en soit, le nullable n'a actuellement aucune valeur, c'est pourquoi vous obtenez cette exception.
Vous essayez d'accéder à une propriété à partir d'un objet inexistant (votre fill.travel est null et vous appelez un accessoire depuis celui-ci), vous pouvez utiliser l'opérateur coalesce (.Net 4.0):
bool travel = fill.travel ?? false;
Vous obtiendrez une InvalidOperationException
si vous accédez à la propriété Nullable.Value lorsque la propriété HasValue est définie sur false.
Vous pouvez vérifier si la variable Nullable a une valeur comme celle-ci avant que vous n'ayez réellement accès à sa valeur.
if(fill.travel.HasValue)
{
bool travel = fill.travel.Value;
}
La valeur provenant de la base de données est un booléen nullable. Lorsque vous appelez Nullable.Value et que la valeur est null, vous obtenez cette exception. Envisagez de vérifier la propriété Nullable.HasValue avant d'appeler .Value.
Null n'est pas faux. Voir la série d'articles d'Eric Lippert sur ce sujet à l'adresse: http://blogs.msdn.com/b/ericlippert/archive/2012/03/26/null-is-not-false.aspx
Vous devez traiter un résultat nul en faux, si vous voulez le traduire.
Pour rendre ce cas clair, considérons ce code:
bool travel;
bool? temptravel = fill.travel.Value;
if( temptravel == true )
travel = true;
else
travel = false;
Ou utilisez simplement la solution de Val Bakhtin si vous utilisez .Net 4
Vous pouvez toujours utiliser le classique C? opérateur comme ceci:
bool travel = (fill.travel == null ? false : fill.travel.Value);