2012-05-11 14 views
18

लाइन पर: bool travel = fill.travel.Value; मैं निम्न त्रुटि हो रही है:निरर्थक वस्तु का मूल्य होना चाहिए?

Nullable object must have a value

और मुझे यकीन है कि क्यों नहीं कर रहा हूँ। मैं बस इतना करना चाहता हूं कि यात्रा के डेटाबेस में मूल्य प्राप्त हो जो वर्तमान में झूठा है। किसी भी सहायता की सराहना की जाएगी।

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

क्या 'getPkRowReport' वापसी करता है का उपयोग कर रहे

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

या बस वैल Bakhtin के समाधान का उपयोग करें:

इस मामले स्पष्ट करने के लिए, इस कोड पर विचार? –

+8

ऐसा लगता है जैसे fill.travel एक नालीबल बूल ('बूल? ') है, और यह डेटाबेस में पूर्ण है। – driis

+1

@ ड्रिइस, यह जवाब है, इसलिए आप इसे नीचे नीचे ले जा सकते हैं। –

उत्तर

30

तुम हमेशा

fill.travel.GetValueOrDefault() 

करने के लिए स्विच डिफ़ॉल्ट (गलत), या डेटाबेस से बूलियन स्तंभ के मूल्य प्रदान करने के लिए कर सकते हैं। या आप ओवरलोड के साथ डिफ़ॉल्ट निर्दिष्ट कर सकते हैं। किसी भी तरह से, वर्तमान में शून्य के पास शून्य नहीं है, यही कारण है कि आपको वह अपवाद मिलता है।

3

आप एक InvalidOperationException अगर आप Nullable.Value संपत्ति पर पहुंचते HasValue संपत्ति गलत है मिल जाएगा।

3

यदि नल चर इस तरह की कुछ मूल्य है आप पहले अपने वास्तव में अपने मूल्य

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

डेटाबेस से आ रही मूल्य एक नल बूलियन है का उपयोग कर सकते हैं। जब आप Nullable.Value को कॉल करते हैं, और मान शून्य है, तो आपको यह अपवाद मिलेगा। संपत्ति को देखने से पहले Nullable.HasValue कॉल करने से पहले। Value।

3

आप अस्तित्वविहीन ऑब्जेक्ट से संपत्ति का उपयोग करने की कोशिश कर रहे हैं (अपने fill.travel रिक्त है, और आप इसे से प्रोप बुला), आप सम्मिलित ऑपरेटर का उपयोग कर सकते हैं (नेट 4.0):

bool travel = fill.travel ?? false; 
1

अशक्त झूठा नहीं है इस बारे में एरिक लिपर्ट की ब्लॉग आलेख श्रृंखला देखें: http://blogs.msdn.com/b/ericlippert/archive/2012/03/26/null-is-not-false.aspx

यदि आप इसका अनुवाद करना चाहते हैं तो आपको झूठी नतीजे को संसाधित करने की आवश्यकता है। यदि आप नेट 4

संबंधित मुद्दे