هل هناك فرق بين النوع ؟ و Nullable<type>?
سؤال
في C# هي nullable أنواع بدائية (أي bool?
) مجرد أسماء مستعارة من أجل المقابلة Nullable<T>
نوع أو هل هناك فرق بين الاثنين ؟
المحلول
إذا نظرتم IL باستخدام Ildasm, ستجد أن كلا منهما ترجمة وصولا إلى Nullable<bool>
.
نصائح أخرى
لا يوجد فرق بين bool? b = null
و Nullable<bool> b = null
.على ?
هو مجرد برنامج التحويل البرمجي C# جملة السكر.
للوصول إلى قيمة منطقي?تحتاج إلى القيام بما يلي:
bool? myValue = true;
bool hasValue = false;
if (myValue.HasValue && myValue.Value)
{
hasValue = true;
}
ملاحظة لا يمكنك القيام به:
if (myValue)
{
hasValue = true;
}
أنا مندهش ذهب أحد إلى المصدر (C# المواصفات) حتى الآن.من §4.1.10 Nullable أنواع:
أ nullable type هو مكتوب T?, حيث T هو الأساسي نوع.بناء الجملة هذا هو اختزال النظام.Nullable<T>و شكلين يمكن أن تستخدم بالتبادل.
لذا, لا, ليس هناك أي فرق بين الصورتين.(على افتراض أنك لا تملك أي نوع آخر يسمى Nullable<T>
في أي من مساحات كنت تستخدم.)
A Nullable<T>
هو هيكل يتكون من تي وقليلا العلم يشير إلى ما إذا كان أو لم يكن T صالحة.A Nullable<bool>
ثلاثة القيم الممكنة:صحيح, خطأ و باطل.
تحرير: لقد اشتقت حقيقة أن علامة الاستفهام بعد "منطقي" كان في الواقع جزء من اسم النوع و لا مؤشر على أن كنت تسأل سؤال :).الجواب على سؤالك ، إذن ، هو "نعم, C# bool?
هو مجرد اسم مستعار Nullable<bool>
".
A bool
هو نوع القيمة ، وبالتالي فإنه لا يمكن أن تحتوي على قيمة فارغة.إذا كنت التفاف أي نوع القيمة مع Nullable<>
, ، وسوف تعطيه تلك القدرة.وعلاوة على ذلك, طرق الوصول إلى قيمة تغيير خصائص إضافية HasValue
و Value
.
ولكن السؤال: Nullable<bool>
و bool?
هي الأسماء المستعارة.
لا لا يوجد فرق.باختصار:
النظام.منطقية -> القيم الصالحة :true, false
منطقي -> الاسم المستعار النظام.منطقية
Nullable<bool> -> القيم الصالحة :true, false, null
منطقي?-> اسم مستعار Nullable<bool>
ويساعد هذا الأمل.
Null الأوليات هي مجرد العادية الأوليات ملفوفة في Nullable.أي مباراة على العكس من ذلك هي فقط مترجم و النحوية السكر.
لا فرق.نلقي نظرة هنا: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
"الجملة ؟ هو اختزال Nullable ، حيث T هو نوع القيمة.اثنين من أشكال قابلة للتبادل."