سؤال
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.
الشيء المهم هنا هو إظهار نية الكود الخاص بك. إذا كانت "النية" هي أن نوع المرجع يمكن أن يكون فارغًا ، فاحرص على تحديد قيمة خالية من القيمة إلى غير قابلة للرسوم ، فإن تحذير المترجم.
إلى المشرف الذي يحذف جميع الإجابات ، لا تفعل ذلك. أعتقد بشدة أن هذه الإجابة تضيف القيمة والحذف من شأنه أن يمنع شخص ما من معرفة ما هو صواب في ذلك الوقت. نظرًا لأنك قمت بحذف جميع الإجابات ، فأنا أعيد إصدار الإجابة هنا. الرابط الذي تم إرساله بخصوص "التكرارات" هو مجرد افتتاح لبعض الأشخاص ولا أعتقد أنها توصية رسمية.