Nullable object moet een waarde hebben?

Op de regel: bool travel = fill.travel.Value; Ik krijg de volgende foutmelding:

Nullable object moet een waarde hebben

en ik weet niet zeker waarom. Het enige dat ik wil doen, is de waarde in de reisdatabase krijgen die momenteel onjuist is. Alle hulp zou op prijs worden gesteld.

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 
 }

Antwoord 1, autoriteit 100%

Je kunt altijd overschakelen naar

 fill.travel.GetValueOrDefault()

Om de standaard (false) of de waarde van de booleaanse kolom uit de database op te geven. Of u kunt de standaard opgeven met een overbelasting. Hoe dan ook, de nullable heeft momenteel geen waarde, daarom krijg je die uitzondering.


Antwoord 2, autoriteit 20%

U probeert toegang te krijgen tot eigendom van het niet-bestaande object (uw fill.travel is null en u roept er prop vanaf),
u kunt de coalesce-operator (.Net 4.0) gebruiken:

bool travel = fill.travel ?? false;

Antwoord 3, autoriteit 9%

U krijgt een InvalidOperationException als u de eigenschap Nullable.Value opent terwijl de eigenschap HasValue onwaar is.


Antwoord 4, autoriteit 6%

U kunt controleren of een nullable variabele een waarde zoals deze heeft voordat u daadwerkelijk toegang krijgt tot de waarde

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

Antwoord 5, autoriteit 6%

De waarde die uit de database komt, is een nullable boolean. Wanneer u Nullable.Value aanroept en de waarde is null, krijgt u deze uitzondering. Overweeg de eigenschap Nullable.HasValue te controleren voordat u .Value aanroept.


Antwoord 6, autoriteit 3%

Dit gebeurde bij mij omdat er een code was zoals deze:

bool? someVariable = (bool)someNullableBool;

De someNullableBool was null en deze fout is opgetreden.

De oplossing was om het te herschrijven als:

bool? someVariable = (bool?)someNullableBool;

Antwoord 7, autoriteit 2%

Null is niet onwaar. Zie de serie blogartikelen van Eric Lippert hierover op: http://blogs.msdn.com/b/ericlippert/archive/2012/03/26/null-is-not-false.aspx

Je moet een null-resultaat in een false verwerken, als je het zo wilt vertalen.

Overweeg deze code om deze zaak duidelijk te maken:

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

Of gebruik gewoon de oplossing van Val Bakhtin als u .Net 4 gebruikt


Antwoord 8

Je kunt altijd de klassieke C gebruiken? operator als volgt:

bool travel = (fill.travel == null ? false : fill.travel.Value);

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes