هل هناك طريقة أنظف لتعيين خاصية فئة مجهولة؟

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

  •  30-09-2019
  •  | 
  •  

سؤال

أنا أعود إلى فصل مجهول:

var clients = from c in this.ClientRepository.SearchClientByTerm(term, 10)
    select new
    {
       id = c.Id,
       line1 = c.Address.Line1 ?? "Unknown Information ..."
    };

المشكلة هي أن العنوان غير قابلة للإلغاء ، مما يعني أنه إذا كان فارغًا ينفجر إلى مليون قطعة.

الحل الأكثر أناقة الذي يمكن أن أفكر فيه هو ...

    line1 = c.Address != null && c.Address.Line1 != null 
               ? c.Address.Line1 : "Unknown Information ..."

هل هناك طريقة أفضل؟ ، لا أحب أن أفقد القدرة على استخدام مشغل الفارغ الفارغ ومن ثم الاضطرار إلى التحقق إذا كان NULL.

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

المحلول

الطريقة المنظف الوحيدة التي يمكنني التفكير فيها هي تعديل getter of Address خاصية لعدم إرجاعها أبدًا ، أو تهيئة المُنشئ دائمًا Address. وإلا فإنك تحتاج دائمًا إلى التحقق من NULL.

نصائح أخرى

لا أستطيع إلا أن أفكر في هذا:

line1 = c.Address.HasValue ?  c.Address.Line1.HasValue ? c.Address.Line1 : "Line1 unknown." : "Address unknown."

يمكنك أيضًا تعديل طريقة خاصية العنوان الخاصة بك الحصول على {} للتحقق من المحتويات وإرجاع القيمة المناسبة ، ويفضل أن تكون ذاكرة التخزين المؤقت للنتائج بحيث لا تعمل على نفس الاختيار مرارًا وتكرارًا.

كنت أود أن ClientRepository.SearchClientByTerm() إعادة تهيئة Address و (ربما) مجموعة Line1 هناك.

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