سؤال

ما هي الأسباب المحتملة لعدم السماح بتمرير أنواع Nullable<> كمعلمة TModel الخاصة بـ System.Web.Mvc.ViewPage<TModel> عام؟قد يكون هذا مفيدًا في بعض الأحيان.

في مصدر ASP.NET MVC، حدد ما يجب أن يكون عليه TModel فئة:

public class ViewPage<TModel> : ViewPage where TModel : class

لكن الأنواع الخالية هي أنواع القيمة.ربما يمكن أن يكون التعريف أقل تقييدًا ...

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

المحلول

لن يكون من المنطقي أن يعمل هذا في الوقت الحالي، حيث يتحقق ViewPage<T> داخليًا دائمًا من أن النموذج هو مثيل لـ T.لن تتمكن أبدًا من تمرير قيمة فارغة بسبب هذا الاختيار.

أما بالنسبة لسبب عدم السماح بأنواع الهياكل في المقام الأول، فهناك العديد من الأسباب.فيما بينها:(أ) قد يشجع الأشخاص على استخدام أنواع بنية مخصصة للنموذج، وهو الأمر الذي لا يكون تقريبًا هو الشيء الصحيح الذي يجب القيام به؛(ب) لا يمكنك تمرير نوع البنية كمعلمة إلى Controller.UpdateModel()؛(ج) يجب أن تتمتع النماذج بمساواة مرجعية حتى تتمكن المرشحات من فحصها وتعديلها؛(د) أنواع البنية المضمنة مثل int، وما إلى ذلك، عادةً لا تكون مفيدة في حد ذاتها ككائن نموذجي؛و(هـ) أنواع البنية لا تدعم الوراثة، على سبيل المثال.قد يؤدي تمرير نموذج int إلى ViewPage<long> إلى تفجير.

لقد اتضح أن (ج) ربما لا يمثل مشكلة لأن أنواع البنية يجب أن تكون غير قابلة للتغيير، لكن العناصر الأخرى تتطلب أن يتم إعطاء السماح بأنواع البنية تفكيرًا واسعًا وقرار تصميم قبل دعمها.إن عواقب دعم هذه العناصر أكبر بكثير من مجرد إزالة القيد على ViewPage<T>.

نصائح أخرى

القيمة الفردية ليست في الواقع "نموذجًا" - هل يمكنك فقط استخدام القاموس والإرسال؟

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