6

System.Web.Helpers.WebGridASP.NET MVC 3 Razor プロジェクトで を使用していますが、 a のフォーマットパラメーターWebGridColumnFunc<dynamic, object>.

このような列を作成すると...

grid.Column(
    format: x => string.Format("{0:d}", x.StartDate)
    );

...StartDate プロパティで厳密な型指定ができません。このまま回避しようとしたら…

grid.Column(
    format: (MyObjectType x) => string.Format("{0:d}", x.StartDate)
    );

...実行時に、ラムダを にキャストできないと言われましたFunc<dynamic, object>。ここで非動的ラムダを使用する方法はありますか? だけでも<object, object>

(私は .NET 4.0 をFunc<in T, out TResult>使用しており、T で反変であると想定されていますが、共分散と反変が動的にどのように機能するかについて混乱しています。)

4

1 に答える 1

3

型システムに関する限り、はとdynamic同じobjectです。

渡すべき強く型付けされた値がないため、強く型付けされたデリゲートを使用することはできません。

内部WebGridでは、彼らはObjectからを取得しPropertyDescriptor、それを代理人に渡します。

共分散はここでは役に立ちません。にFunc<YourType, string>変換Func<object, string>可能であった場合、他のタイプでそれを呼び出して、無効なキャストを取得する可能性があります。

于 2011-05-05T17:38:41.633 に答える