سؤال

لقد سئمت بشدة من التحقق من جميع الحجج الخاصة بي بحثًا عن قيمة فارغة، ورمي ArgumenutNullExceptions عندما تكون كذلك.

كما أفهمها، يتيح الإصدار C# 4.0 بعض التصميمات من خلال بنيات العقد.هل سيكون من الممكن تحديد أن الطريقة لن تقبل الوسائط الفارغة في C# 4.0؟

أيضًا، هل هناك أي شيء يمكنني فعله في هذه الأثناء (ربما سمة؟) لتجنب هذه المهمة الرتيبة المتمثلة في التحقق من القيمة الفارغة والرمي؟

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

المحلول

ويمكنك إنشاء فئة NotNull<T> العامة التي تساعد، ولكن هناك بعض الآثار الجانبية. انظر روبرت نيستروم في بلوق وظيفة .

نصائح أخرى

وريك بروستر يصف حلا جيدا للمعلمة موجزة، على غرار التعريفي التدقيق في هذا المنصب،

HTTP: // blog.getpaint.net/2008/12/06/a-fluent-approach-to-c-parameter-validation/

ويتجنب استخدام انعكاس (عيب DBC)، ويخلق أي النفقات العامة لمسار رمز غير استثنائية.

ومثل كيف انه يستخدم أساليب الإرشاد للسماح على ما يبدو المثال استدعاءات الأسلوب على كائنات فارغة. قليلا ذكي جدا من الترميز IMO.

إذا تباع لكم على DBC، وجوجل المواصفات # وPostSharp.

لست متأكدًا من إنشاءات DbC الأصلية في الإصدار C# 4.0 ولكن Microsoft ستقوم بإصدار لغات مشتركة انكماش مكتبة.
يمكنك تنزيل نسخة MSVS2008 هنا.

كبديل للإجابات المقدمة بالفعل، يجدر النظر في Null Object design pattern.

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

لا يعتمد نمط التصميم هذا على C# 4.0 وفي الواقع يمكن تنفيذه بسهولة في أي لغة برمجة OO تقريبًا.

لقد بدأت للتو في استخدام Code Contracts، وهي ميزة جديدة في C# 4.0 وتحتاج إلى تنزيل وظيفة إضافية من MS للسماح لك برؤيتها في إعدادات مشروعك.التفاصيل هنا ->http://research.microsoft.com/en-us/projects/contracts/

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