首页 > 解决方案 > 使用 Linq 访问另一个对象中的对象属性

问题描述

我需要从另一个对象中的对象获取值。我的问题是我无法从子对象中访问任何值,我总是得到对象类型本身的值。

我正在访问对象的代码

var test = scheduledTask.Fields.Select(x => x.FieldValue);

这将返回结果视图

[0] 10111
[1] {ObjectType.Extension} 

我需要访问包含以下属性(以及其他属性)的 [1] 元素,并且我需要访问 DisplayName

{
DisplayName: "MainMenu",
CategoryId: -1,
Id: 433
}

计划任务是

{
Fields: {Fields.Field[2]},
LastModifiedDate:null,
{Fields.Field[2]}
}

标签: c#linq

解决方案


您不需要 LINQ 来访问数组的特定索引。

string name = (scheduledTask.Fields[1].FieldValue as ObjectType.Extension)?.DisplayName;

由于数组包含不同类型的值,我假设我们有一个object. 因此,我们必须转换为预期的类型才能访问特定的字段或属性。

如果值为 null 或类型不匹配as将产生null。空条件运算符?.仅在操作数为非空时执行成员或元素访问操作,否则返回null

如果您不知道所需值的索引,您可以查询

string name = (scheduledTask.Fields
    .Select(x => x.FieldValue)
    .OfType<ObjectType.Extension>()
    .FirstOrDefault()
)?.DisplayName;

如果您确定所需的值存在且不为 null,则可以删除?.


推荐阅读