0

「ギフト」プロパティにリストが含まれ、リスト内の各項目が 2 つの整数値を含む配列 [25,43] である ExpandoObject (moduleData) があります。

私の目標は、リストを検索して、最初の要素が値に等しい配列を見つけることです。例えば:

moduleData.gifts[34][0]=theValue

編集: .gifts の各アイテムは、「Gift」クラスのインスタンスではなくリストです。構造は次のようになります。

ExpandoObject.List<object>.List<object>

次の LINQ 式を試しましたが、「最初にデリゲートまたは式ツリー型にキャストしないと、ラムダ式を動的にディスパッチされた操作の引数として使用できません」というエラーが表示されます。

var test = (List<object>)Model.moduleData.gifts.FirstOrDefault(item => item[index][0] = 99);

「アイテム」を IEnumerable にキャストしようとしましたが、正しい構文を取得できません。キャスティングを追加するにはどうすればよいですか、またはこの目標を達成するためのより良い方法はありますか?

4

3 に答える 3

0

DavidN のソリューションに代わる方法は、動的解決を使用しEnumerable.FirstOrDefaultて、ラムダの型を静的に宣言することです。

var test = Enumerable.FirstOrDefault(Model.moduleData.gifts,
                       (Func<List<Gift>, bool>)(item => item[0] = 99));
于 2013-08-08T22:31:43.023 に答える
0

ギフトは のタイプだと思いList<Gift[]>ます。次に、次のようにします。

var test = ((List<Gift[]>)Model.moduleData.gifts).FirstOrDefault(item => item[index][0] == 99);

その理由は、贈り物の型がコンパイル時にわからないためです。そのため、C# コンパイラには、指定されているラムダの型を解決する方法がありません。

于 2013-08-08T17:37:35.183 に答える
0

TypeOf 拡張機能を使用してみてください

Model.moduleData.gifts.TypeOf<Gift>().FirstOrDefault(item => item[index][0] = 99);
于 2013-08-08T17:38:45.957 に答える