سؤال

أنا أعمل مع 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>, ، سيكون من الممكن الاتصال به مع أي نوع آخر والحصول على يلقي غير صالح.

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