هل يجب علي التحقق من صحة خاصية من النوع Nullable<int>؟

StackOverflow https://stackoverflow.com/questions/1228167

  •  22-07-2019
  •  | 
  •  

سؤال

أقوم بإنشاء قسم تكوين مخصص (وراثة System.Configuration.ConfigurationSection)، وأتساءل عما إذا كان يجب علي التحقق من صحة القيمة لـ ConfigurationProperty التي تعد Nullable int.أي هل يجب علي أن أفعل هذا:

[ConfigurationProperty("NullableInt", IsRequired = true)]
public int? NullableInt
{
    get 
    {
        return String.IsNullOrEmpty(Convert.ToString(this["NullableInt"]))
                    ? (int?) null
                    : Convert.ToInt32(this["NullableInt"]);
    }
    set
    {
        this["NullableInt"] = value.HasValue ? Convert.ToString(value) : "";
    }
}

أو يمكنني فقط أن أفعل شيئًا مثل هذا:

[ConfigurationProperty("NullableInt", IsRequired = true)]
public int? NullableInt
{
    get{ return Convert.ToInt32(this["NullableInt"]); }
    set{ this["NullableInt"] = Convert.ToString(value); }
}

أم أن هناك طريقة أفضل معًا؟

شكرا لك مقدما.

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

المحلول

حسنًا، سيرجع Convert.ToInt32 0 إذا كانت القيمة فارغة وسيطرح استثناءً إذا لم يكن التعبير رقميًا..لذا نعم، تريد التحقق من الصحة!- خاصةً أنك تريد أن تقوم الخاصية بإرجاع قيمة فارغة مقابل قيمة فارغة وليس 0 (وهو ما سيرجعه Convert.ToInt32 مقابل قيمة فارغة كما تمت الإشارة إليه سابقًا)

أيضًا، قد يكون من المفيد الإشارة إلى الدالة Int32.Parse() التي تشبه إلى حد كبير Convert.ToInt32() ولكنها تطرح ArgumentNullException إذا حاولت ذلك تحليل فارغة - وهو الفرق الرئيسي بين Convert.ToInt32 وInt32.Parse()

نصائح أخرى

وأول واحد هو الجواب أكثر اكتمالا.

وثانية واحدة سوف تعمل بشكل جيد في كثير من الحالات ولكن فشل في الحالات الحافة. عند كتابة جزء من هذا القبيل يجب ضمان الثوابت بسيطة للممتلكات. أي أن يلي سوف يكون صحيحا بالنسبة لجميع قيم الباحث؟

int? v1 = GetSomeNullableIntValue();
obj.NullableInt = v1;
int? v2 = obj.NullableInt;
bool equal = v1 == v2;  // Must be true

والمثال الثاني الذي لديك لا تجعل مثل هذا ضمان لقيمة خالية من كثافة العمليات؟ النظر في كيف يمكن لكثافة باطل؟ سوف تكون ممثلة في هذا السيناريو؟ يمر في كثافة باطل؟ وقيمة إلى مجموعة رمي، وبالتالي لا يمكن أبدا أن تضاف إلى المجموعة. وبالمثل، على افتراض تم تخزينه لاغيا أو String.Empty في التكوين انها لن تأتي من أي وقت مضى إلى الوراء مرة أخرى باعتباره الباحث باطل؟

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