C # अशक्त स्ट्रिंग त्रुटि


136
private string? typeOfContract
{
  get { return (string?)ViewState["typeOfContract"]; }
  set { ViewState["typeOfContract"] = value; }
}

बाद में कोड में मैं इसे इस तरह से उपयोग करता हूं:

typeOfContract = Request.QueryString["type"];

मुझे typeOfContractलाइन स्टैटिंग की घोषणा में निम्नलिखित त्रुटि मिल रही है :

सामान्य प्रकार या विधि 'System.Nullable <T>' में पैरामीटर 'T' के रूप में उपयोग करने के लिए 'स्ट्रिंग' एक गैर-अशक्त मान प्रकार होना चाहिए।

कोई विचार? मूल रूप से, मैं यह सुनिश्चित करना चाहता हूं कि कोई क्रिया करने "type"से QueryStringपहले मौजूद हो ।

जवाबों:


304

System.String एक संदर्भ प्रकार है और पहले से ही "अशक्त" है।

अशक्त <टी> और? प्रत्यय मान प्रकार के लिए होते हैं जैसे Int32, Double, DateTime, आदि।


13
एक बात ध्यान दें: Nullable <T> एक मान प्रकार है, लेकिन "संरचनात्मक" सामान्य प्रकार की बाधा में केवल गैर-अशक्त मान प्रकार शामिल हैं - इसलिए आप Nullable <Nullable <int >> नहीं कर सकते।
जॉन स्कीट

C # 8.0 में संदर्भ प्रकारों को अशक्त के रूप में चिह्नित किया जा सकता है। string?दुनिया को यह बताने के लिए एक प्रकार हो सकता है कि यह स्ट्रिंग अशक्त हो सकती है। Ref: youtube.com/watch?v=VdC0aoa7ung
nkalfov

39

आप इसे जटिल बना रहे हैं। stringपहले से ही अशक्त है। आपको इसे अधिक अशक्त बनाने की आवश्यकता नहीं है । ?संपत्ति प्रकार पर बाहर ले जाओ ।


19

स्ट्रिंग अशक्त करने के लिए पैरामीटर नहीं हो सकता क्योंकि स्ट्रिंग एक मूल्य प्रकार नहीं है। स्ट्रिंग एक संदर्भ प्रकार है।

string s = null; 

एक बहुत ही मान्य कथन है और इसे अशक्त बनाने की आवश्यकता नहीं है।

private string typeOfContract
    {
      get { return ViewState["typeOfContract"] as string; }
      set { ViewState["typeOfContract"] = value; }
    }

की वजह से काम करना चाहिए के रूप में कीवर्ड।


13

स्ट्रिंग एक संदर्भ प्रकार है, इसलिए आपको यहां (और नहीं) का उपयोग करने की आवश्यकता नहीं Nullable<T>है। बस स्ट्रिंग के रूप में टाइपऑफ कांट्रेक्ट घोषित करें और क्वेरी स्ट्रिंग से प्राप्त करने के बाद बस नल की जांच करें। या String.IsNullOrEmpty का उपयोग करें यदि आप रिक्त स्ट्रिंग मानों को नल के समान संभालना चाहते हैं।


4

अशक्त के लिए, स्ट्रिंग को छोड़कर, सी # आदिम के? सभी के साथ उपयोग करें ।

निम्न पृष्ठ सी # आदिमों की एक सूची देता है : http://msdn.microsoft.com/en-us/library/aa711900(v=vs.71).aspx


1
लिंक है ब्रोकन थैंक्स
मीना गैब्रिएल

धन्यवाद मीना, मैंने एक अलग लिंक पाया और संदर्भ को अद्यतन किया।
जेम्स ओर्वेक

1
सिर्फ आदिम ही नहीं, सभी गैर-अशक्त मूल्य प्रकार (जो विशेष रूप से .NET द्वारा नियंत्रित नहीं किए जाते हैं) काम करते हैं।
IllidanS4

0

कृपया ध्यान दें कि C # के आगामी संस्करण में जो 8 है, उत्तर सही नहीं हैं।

All the reference types are non-nullable by default और आप वास्तव में निम्न कार्य कर सकते हैं:

public string? MyNullableString; 
this.MyNullableString = null; //Valid

तथापि,

public string MyNonNullableString; 
this.MyNonNullableString = null; //Not Valid and you'll receive compiler warning. 

यहां महत्वपूर्ण बात यह है कि आपके कोड का इरादा दिखाना है। यदि "आशय" यह है कि संदर्भ प्रकार अशक्त हो सकता है, तो इसे चिह्नित करें अन्यथा अन्यथा अशक्त करने के लिए अशक्त मान प्रदान करने के परिणामस्वरूप संकलक चेतावनी होगी।

और जानकारी

सभी उत्तरों को हटाने वाले मध्यस्थ के लिए, यह मत करो। मुझे दृढ़ता से विश्वास है कि यह उत्तर मूल्य जोड़ता है और हटाना किसी को यह जानने से रोकता है कि उस समय क्या सही है। चूंकि आपने सभी उत्तर हटा दिए हैं, इसलिए मैं यहां उत्तर पुन: पोस्ट कर रहा हूं। "डुप्लिकेट्स" के बारे में जो लिंक भेजा गया था, वह केवल कुछ लोगों की एक शुरुआत है और मुझे नहीं लगता कि यह आधिकारिक सिफारिश है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.