2010-10-20 5 views
6

में खाली तार करने के लिए अशक्त सत्र सामान्य मानों पर मैं वेब प्रोग्रामिंग के लिए VB.net का उपयोग करने के लिए प्रयोग किया जाता रहा हूँ।कैसे सी #

Dim s as string = Session("s") 

मैं s वेब सत्र से के लिए एक स्ट्रिंग मान मिलता है:

अक्सर, मैं की तरह कुछ है। यदि वेब सत्र में कोई मूल्य नहीं है, तो मुझे एक खाली स्ट्रिंग मिलती है।

हालांकि, AFAIK, सी # में, मैं नीचे दिए गए कोड की तरह कुछ एक ही बात करने के लिए करना होगा।

string s; 
try { s = Session["s"].ToString(); } 
catch { s = ""; } 

क्या ऐसा करने का कोई आसान तरीका है?

+1

वीबी में, आप कुछ भी नहीं मिलता है, तो आप एक सत्र चर जो मौजूद नहीं है प्राप्त करने का प्रयास। मेरी सत्र पुन: प्राप्ति कोड में से अधिकांश की तरह दिखता है: मंद रों के रूप में स्ट्रिंग = सत्र ("एस") यदि नहीं String.IsNullOrEmpty (रों) तब DoSomethingWithS (रों) अंत तो –

उत्तर

15

यह ऐसा करने का एक त्वरित तरीका है:

s = (string)Session["s"] ?? ""; 

यह एक स्ट्रिंग के लिए सत्र [ "एस"] डाली जाएगा, और अगर यह रिक्त नहीं है, मान। यदि यह शून्य है, तो यह एक खाली स्ट्रिंग वापस कर देगा। "a ?? b" अभिव्यक्ति अनिवार्य रूप से "के रूप में a != null ? a:b" एक ही है (?? और अधिक कुशलता से संकलित किया गया है, हालांकि)

कुछ किसी और को ध्यान में रखना: आप सामान्य आवेदन तर्क के लिए अपवाद का उपयोग कभी नहीं करना चाहिए।

+0

, लघु मिठाई। कोई अतिरिक्त कार्य नहीं मुझें यह पसंद है। – NotMe

+0

निम्नलिखित वाक्यविन्यास क्लीनर हो सकता है: स्ट्रिंग टेस्ट = (सत्र ["टेस्ट"] ?? स्ट्रिंग। लक्षण)। टॉस्ट्रिंग(); – Moo

+0

यह क्लीनर नहीं है, लेकिन यह सुरक्षित है अगर सत्र [ "टेस्ट"] एक स्ट्रिंग (जो मेरा मानना ​​है कि यहां ऐसा नहीं है) –

-3

मैं लगभग फिलिप के लिए सहमत हैं, लेकिन यह केवल यदि "एस" सत्र में मौजूद है काम करता है, अन्यथा एक KeyNotFoundException हो जाएगा। यह कोड इसे जांचता है, लेकिन फिलिप के पूर्ण मुद्दे को हल नहीं करता है।

s= Session.ContainsKey("s")?Session["s"]:""; 

तो दोनों संभावनाओं को कवर करने के लिए, यह MRE जटिल हो जाता है:

s = Session.ContainsKey("s")?(Session["s"]??""):""; 

यह वास्तव में यह आसान नहीं है, लेकिन प्रदर्शन के लिए एक अपवाद को पकड़ने की तुलना में बेहतर होना चाहिए।

+0

मुझे विश्वास नहीं है कि यह ऐसा कोई अपवाद फेंकता है। प्रलेखन (http://msdn.microsoft.com/en-us/library/f0yd7k72.aspx पर) पढ़ता है: "निर्दिष्ट नाम के साथ संग्रह में मूल्य। यदि निर्दिष्ट कुंजी नहीं मिली है, तो इसे प्राप्त करने का प्रयास करें शून्य, और इसे सेट करने का प्रयास निर्दिष्ट कुंजी का उपयोग कर एक नया तत्व बनाता है। " –

+0

दरअसल, कुंजी नहीं मिलने पर सत्र शून्य हो जाएगा। यह एक अपवाद फेंक नहीं देगा –

+0

Yup - मूल प्रश्न में, यह है। ToString() कॉल जो अपवाद फेंक रहा है। –

0

क्योंकि स्ट्रिंग है संदर्भ प्रकार तो व्यर्थ है, तो आप string.IsNullOrEmpty (रों) के माध्यम से खाली या शून्य के लिए जाँच कर सकते हैं: (के रूप में फिलिप Leybaert कहते हैं)

string s = string.IsNullOrEmpty((string)strObject) ? string.Empty : strObject.ToString(); 

नहीं तो आप इस्तेमाल कर सकते हैं ?? ऑपरेटर।

+0

स्ट्रिंग एक संदर्भ प्रकार है, इसलिए यह हमेशा शून्य है। आपका कोड संकलित भी नहीं करता है क्योंकि 'स्ट्रिंग?' वैध वाक्यविन्यास नहीं है। –

+0

आप सही फिलिप हैं, स्ट्रिंग एक संदर्भ प्रकार है। मैंने इस तरह के विचार को दर्शाने के लिए अपना कोड बदल दिया है। – ArBR