0

我有一个 ExpandoObject (moduleData),其中“gifts”属性包含一个列表,列表中的每个项目都是一个包含两个整数值的数组 [25,43]。

我的目标是搜索列表并找到第一个元素等于一个值的数组。例如:

moduleData.gifts[34][0]=theValue

编辑: .gifts 中的每个项目都是一个列表,而不是“礼物”类的一个实例。结构如下所示:

ExpandoObject.List<object>.List<object>

我尝试了以下 LINQ 表达式,但收到错误消息“无法使用 lambda 表达式作为动态调度操作的参数,而无需先将其转换为委托或表达式树类型”。

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

我尝试将“项目”转换为 IEnumerable,但无法正确获取语法。我将如何添加铸件或有更好的方法来实现这个目标?

4

3 回答 3

0

我假设礼物是类型List<Gift[]>。然后你会这样做:

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

原因是礼物的类型在编译时是未知的,因此 C# 编译器无法解析指定的 lambda 类型。

于 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 回答
0

DavidN 的解决方案的替代方法是使用动态解析Enumerable.FirstOrDefault并静态声明 lambda 的类型:

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