سؤال

وأنا فقط مهتم في آراء الناس. عند استخدام أنواع nullable في C # ما هو أفضل وسيلة لاختبار الممارسة لاغية:

bool isNull = (i == null);

أو

bool isNull = !i.HasValue;

وأيضا عند تعيين إلى نوع غير الصفرية هو هذا:

long? i = 1;
long j = (long)i;

وأفضل من:

long? i = 1;
long j = i.Value;
هل كانت مفيدة؟

المحلول

استخدم النماذج التي تم تنفيذها خصيصا لك من قبل C # الفريق. إذا اعترض أحد، أقول لهم قال اندرس أنه بخير.

وما أقوله، باستخفاف، هو أن هناك الكثير من العمل ذهب إلى دمج أنواع nullable في ج # لتعطيك تجربة برمجة جيدة.

لاحظ أن من حيث الأداء، سواء الأشكال بتجميع وصولا الى نفس IL، أي:

int? i = 1;
bool isINull = i == null;
int j = (int)i;

وينتهي المطاف مثل هذا بعد C # المترجم قد حصلت على ما يلي:

int? i = 1;
bool isINull = !i.HasValue;
int j = i.Value;

نصائح أخرى

وأود أن استخدام هذا:

long? i = 1;
...some code...
long j = i ?? 0;

وهذا يعني، إذا <م> أنا هو <قوية> اغية ، أو من سيتم تعيين 0.

وأود أن دائما استخدام (ط == فارغة) النموذج. ويعرب عن ما تقومون به.

وWRT للسؤال الثاني، وأعتقد أن أي شكل على ما يرام. ولكن أنا سوف تحقق دائما ضد باطل أولا واتخاذ الإجراءات المناسبة - ربما التفاف أن الاختيار والعمل حتى في أسلوب مساعد (في كثير من الأحيان هو مجرد يحدد قيمة افتراضية)

.

وأنا لم تستخدم أنواع nullable في الممارسة، ولكن للمرة الثانية، كنت تشير في الواقع باستخدام j.GetValueOrDefault (). وتشير الوثائق إلى أن هذا الأخير، فإنه يرمي في الواقع InvalidOperationException في حالة وجود قيمة فارغة. اعتمادا على تطبيق داخلي المشغل يلقي explict لفترة طويلة ؟، جبروت السابق أيضا. فما استقاموا لكم فاستقيموا العصا مع GetValueOrDefault وعلاج حالة اغية / الافتراضي بشكل مناسب.

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

وفتحت العاكس. HasValue هو البحث على علم منطقية التي تم تعيينها عند تغيير القيمة. وذلك من حيث دورات في البحث سيكون أسرع مقارنة ذلك الحين.

public Nullable(T value)
{
    this.value = value;
    this.hasValue = true;
}

private bool hasValue;

internal T value;

public bool HasValue
{
    get
    {
        return this.hasValue;
    }
}

وانهم على حد سواء هو نفسه، ولكن أود أن استخدام الإصدار السابق على حد سواء، لأنه أكثر شيوعا في اللغة: مقارنة فارغة والصب إلى نوع

وعادة ما تميل إلى تميل إلى الخيار الأول في كلتا الحالتين، لأنه أكثر "بدائية" المنحى بدلا من وجوه المنحى (الذي كان حقا ما نحن ذاهبون ل)، ولكنه في الحقيقة لا يهم كثيرا

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