لماذا يستخدم ويبغريد ديناميكية في التنسيق?
-
29-10-2019 - |
سؤال
أنا أعمل مع System.Web.Helpers.WebGrid
في ASP.NET مفك 3 مشروع الحلاقة ، وأنا أواجه مشكلة في فهم لماذا المعلمة شكل ل WebGridColumn
هو Func<dynamic, object>
.
إذا قمت بإنشاء عمود مثل هذا...
grid.Column(
format: x => string.Format("{0:d}", x.StartDate)
);
...أنا لا أحصل على كتابة قوية على الممتلكات ستارتديت.إذا حاولت الالتفاف حوله مثل هذا...
grid.Column(
format: (MyObjectType x) => string.Format("{0:d}", x.StartDate)
);
...قيل لي في وقت التشغيل أن بلدي لامدا لا يمكن أن يلقي إلى Func<dynamic, object>
.هل هناك طريقة ما يمكنني من خلالها استخدام لامدا غير ديناميكية هنا?حتى لو كان فقط <object, object>
?
(أنا في صافي 4.0 ، و Func<in T, out TResult>
من المفترض أن يكون كونترافاريانت على ر ، ولكن أنا في حيرة حول كيفية التغاير و كونترافاريانس العمل مع ديناميكية.)
المحلول
بقدر ما يتعلق الأمر بنظام النوع, dynamic
هو نفسه كما object
.
لا يمكنهم استخدام مندوب مكتوب بشدة لأنه ليس لديهم قيمة مكتوبة بقوة لتمريرها.
داخل WebGrid
, ، يحصلون على Object
من أ PropertyDescriptor
, ، وتمرير ذلك إلى مندوبك.
التغاير لن يساعد هنا;كان Func<YourType, string>
كانت قابلة للتحويل إلى Func<object, string>
, ، سيكون من الممكن الاتصال به مع أي نوع آخر والحصول على يلقي غير صالح.