How do you guard for Null Reference exceptions in Linq To Xml? -
& lt;? Xml संस्करण = "1.0" एन्कोडिंग = "यूटीएफ -8"? & Gt; & LT; पृष्ठों & gt; & Lt; पृष्ठ आईडी = "56" & gt; & Lt; img id = "teaser" src = "img / teaser_company.png" & gt; & lt; / img & gt; & Lt; / पृष्ठ & gt; & Lt; / पृष्ठों & gt; मेरे पास एक XML फ़ाइल है जो एक सीएमएस के भीतर पृष्ठों के लिए अतिरिक्त संसाधनों को परिभाषित करता है। LinqToXml?
var पृष्ठ = (extensionsDoc.Descendants ("पृष्ठ") में जहां टैब एलेमेंट.आइटिबेट ("id") के साथ इस फ़ाइल को क्वेरी करते समय रिक्त संदर्भ अपवादों की रक्षा करने का सबसे अच्छा तरीका क्या है? )। मूल्य == tabId.ToString () टैब चुनें एलिमेंट) .SingleOrDefault (); यदि कोई पृष्ठ तत्व में "id" नामक विशेषता नहीं है, तो यह कोड संभावित रूप से एक नल संदर्भ अपवाद ट्रिगर कर सकता है। क्या मुझे एक प्रयास पकड़ ब्लॉक का उपयोग करना पड़ता है या क्या इसका संचालन करने का कोई तरीका है? उदाहरण के लिए यदि पृष्ठ तत्व के लिए "id" नामक कोई विशेषता नहीं है, तो पेज ऑब्जेक्ट के लिए पृष्ठ के लिए रिक्त स्थान प्राप्त करें।
संपादित करें: यह स्पष्ट रूप से एक लंबे समय पहले लिखा गया था - इन दिनों मैं निश्चित रूप से इगोर के उत्तर के अनुसार कलाकारों के साथ जाता हूं।
सबसे सरल तरीका कुछ ऐसा होगा:
< Code> var page = (extensions.doc.Descendants ("पृष्ठ") में tabElement से idAttribute = tabElement.Attribute (id ") को दें, जहां idAttribute! = Null & amp; amp; id.Attribute.Value == tabId.ToString () टैब चुनें एलिमेंट) .SingleOrDefault (); वैकल्पिक रूप से आप XElement :
सार्वजनिक स्टैटिक स्ट्रिंग एट्रिब्यूट ValueOrDefault (यह XElement तत्व, स्ट्रिंग विशेषता नाम) के लिए एक एक्सटेंशन विधि लिख सकते हैं। {XAttribute attr = element.Attribute (attributeName); वापसी एट्रर == नल? शून्य: attr.Value; } तब उपयोग करें:
var page = (extensionsDoc.Descendants में तत्व से ("पृष्ठ") जहां element.AttributeValueOrDefault ("id") = = TabId.ToString () चुनें तत्व) .SingleOrDefault (); या डॉट संकेतन का उपयोग करने के लिए:
var पृष्ठ = एक्सटेंशन डॉक। डिस्केन्डेंट्स ("पृष्ठ")। जहां (एक्स = & gt; x.AttributeValueOrDefault (" आईडी ") == tabId.ToString ()) .SingleOrDefault (); (यह पहले से एक बार, बीटीडब्लू, प्रत्येक पुनरावृत्ति के बजाय, tabId.ToString () को कॉल करने में सक्षम होगा।)
Comments
Post a Comment