0

内部で WebPages を使用して WebMatrix を使用してページをモックアップしようとしています。匿名オブジェクトの暗黙的に型指定された配列を PageData キーの 1 つに割り当てましたが、コレクションで LINQ メソッドを使用しようとすると、次のエラーが発生します。

CS1977: Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type

サンプルコードは次のとおりです。

@{
  PageData["Vals"] = new [] {
    new { ID=1, Quantity=5 },
    new { ID=2, Quantity=3 }
  };
  var sum = PageData["Vals"].Sum(x => x.Quantity);
}

最初に配列を通常のオブジェクトに格納すると、LINQ メソッドを問題なく使用できます。動的オブジェクトとして PageData から出てきたときに問題があるようですが、初期型に強制的に戻すための秘密のソースがまったくわからないようです。

4

1 に答える 1

2

この問題の一般的な解決策は、明示的にキャストすることです。PageData["Vals"]つまり、期待するタイプの配列に式をキャストします。ただし、これは匿名型では機能しません。その型へのハンドルがないため、キャストできないためです。

new[] { ... }動的に型指定された に格納するPageDataと、匿名型へのコンパイル時の参照がすべて失われます。したがって、その上で型固有の LINQ 演算子を使用しようとすることは、非スターターです。

コメントで述べたように、正しい解決策は常に厳密に型指定されたモデルを使用することです。ページをモックアップするために、ビュー内で宣言および定義された匿名型に依存しないでください。ページを実際のモデルに依存させ、そのモデルを設定してページにフィードします。

于 2011-06-06T18:20:55.807 に答える