如何在ExpandoObject C#上使用lambda表达式来查找数组元素值
本文关键字:表达式 lambda 查找 数组元素 ExpandoObject | 更新日期: 2023-09-27 18:26:59
我有一个ExpandoObject(moduleData),其中"gifts"属性包含一个List,列表中的每个项都是一个数组[25,43],其中包含两个整数值。
我的目标是搜索List并找到第一个元素等于值的数组。例如:
moduleData.gifts[34][0]=价值
编辑:礼物中的每个项目都是一个列表,而不是"礼物"类的一个实例。结构如下:
ExpandoObject.List<object>.List<object>
我尝试过以下LINQ表达式,但收到错误"如果不先将lambda表达式强制转换为委托或表达式树类型,就无法将其用作动态调度操作的参数"。
var test = (List<object>)Model.moduleData.gifts.FirstOrDefault(item => item[index][0] = 99);
我尝试过将"item"强制转换为IEnumerable,但无法获得正确的语法。我该如何添加选角,或者有更好的方法来实现这个目标吗?
尝试使用TypeOf扩展
Model.moduleData.gifts.TypeOf<Gift>().FirstOrDefault(item => item[index][0] = 99);
我认为礼物属于List<Gift[]>
类型。然后你会做:
var test = ((List<Gift[]>)Model.moduleData.gifts).FirstOrDefault(item => item[index][0] == 99);
原因是在编译时礼物的类型是未知的,所以C#编译器无法解析指定的lambda类型。
DavidN解决方案的一个替代方案是在Enumerable.FirstOrDefault
上使用动态分辨率,并静态声明lambda:的类型
var test = Enumerable.FirstOrDefault(Model.moduleData.gifts,
(Func<List<Gift>, bool>)(item => item[0] = 99));