سؤال

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

في وقت لاحق في الكود الذي أستخدمه مثل هذا:

typeOfContract = Request.QueryString["type"];

أحصل على الخطأ التالي في إعلان typeOfContract الخط القول:

يجب أن يكون النوع "سلسلة" نوعًا من القيمة غير القابلية لاستخدامه كمعلمة "T" في نظام أو طريقة عامة.u003CT> ''

أيه أفكار؟ في الأساس ، أريد أن أتأكد من ذلك "type" موجود في QueryString قبل إجراء إجراء.

هل كانت مفيدة؟

المحلول

System.String هو نوع مرجعي وهو بالفعل "Nullable".

قابليةu003CT> و ال ؟ لاحقة لأنواع القيمة مثل int32 ، مزدوجة ، وقت ، إلخ.

نصائح أخرى

أنت تجعلها معقدة. string هو بالفعل لاغية. لا تحتاج إلى صنعه أكثر قابلية. أخرج ال ? على نوع الممتلكات.

لا يمكن أن تكون السلسلة هي المعلمة إلى Nullable لأن السلسلة ليست نوعًا من القيمة. السلسلة هي نوع مرجعي.

string s = null; 

هو بيان صالح للغاية وليس هناك حاجة لجعله لا شيء.

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

يجب أن تعمل بسبب كما الكلمة الرئيسية.

السلسلة هي نوع مرجعي ، لذلك لا تحتاج إلى (ولا يمكنك) استخدامه Nullable<T> هنا. ما عليك سوى إعلان TypeOfContract كسلسلة وفحص ببساطة NULL بعد الحصول عليها من سلسلة الاستعلام. أو استخدم string.isnullorEmpty إذا كنت تريد التعامل مع قيم السلسلة الفارغة مثل NULL.

للاطلاعية ، والاستخدام ? مع كل من C# البدائية, ، باستثناء السلسلة.

تقدم الصفحة التالية قائمة بـ C# البدائية: http://msdn.microsoft.com/en-us/library/AA711900(V=Vs.71).aspx

يرجى ملاحظة أنه في الإصدار القادم من 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. 

الشيء المهم هنا هو إظهار نية الكود الخاص بك. إذا كانت "النية" هي أن نوع المرجع يمكن أن يكون فارغًا ، فاحرص على تحديد قيمة خالية من القيمة إلى غير قابلة للرسوم ، فإن تحذير المترجم.

مزيد من المعلومات

إلى المشرف الذي يحذف جميع الإجابات ، لا تفعل ذلك. أعتقد بشدة أن هذه الإجابة تضيف القيمة والحذف من شأنه أن يمنع شخص ما من معرفة ما هو صواب في ذلك الوقت. نظرًا لأنك قمت بحذف جميع الإجابات ، فأنا أعيد إصدار الإجابة هنا. الرابط الذي تم إرساله بخصوص "التكرارات" هو مجرد افتتاح لبعض الأشخاص ولا أعتقد أنها توصية رسمية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top