2

Visual Studio 2012、ASP.NET MVC 4、および Razor ビューを使用しています。次のコードを検討してください。

@{
    Action<Action<int>> fun = x => { x(42); };
    fun(x =>  { PrintX(x); }); // This is OK
    fun(x =>  { var z = PrintX(x); }); // This produces error
    // "Argument 1: cannot convert from 'lambda expression' to
    // 'System.Action<int>'"
}
@helper PrintX(int x) { <div>@x</div> }

どういうわけかvar z =、ラムダ関数の内容に文字を追加すると、正しい型にキャストできなくなります (実際には、その関数の値を取得するどの形式でもこれが得られます)。

ただし、このエラーは IntelliSense によってのみ生成されます。実行時に動作します。

何を与える?

4

1 に答える 1

0

へー、自分で解決しました。System.Web.WebPages.HelperResult:) 問題は、メソッドがアセンブリで定義されている型を返すことでしたSystem.Web.WebPages。残念ながら、そのアセンブリは IntelliSense に関する限り読み込まれていないため、奇妙なことが起こり始めました。

これを修正するには、次の行を web.config に追加するだけで済みました。

<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

(はい、結局のところ、私はまだ古い MVC 3 を使用しています。私の間違いで、質問を修正しました)

于 2013-02-13T15:07:33.070 に答える