c# - 将 LINQ 用于类型对象列表

标签 c# linq

我有一个类型对象列表

List<object> _list;

我在一个方法中初始化这个列表并添加一些具有属性的项目

void CreateList()
{
_list= new List<object>();
_list.Add(new {Prop1 = 45, Prop2 = "foo", Prop3 = 4.5});
_list.Add(new {Prop1 = 14, Prop2 = "bar", Prop3 = 3.1});
}

但是我现在有一个类型对象列表,但我不知道它的类型或元素的类型。

我想使用 LINQ 从列表中根据它们的属性选择一些元素,例如找到所有()。 我该怎么做?创建一个 POCO 类会更好吗?

最佳答案

I now have a list of type object and I don't know it's type or the type of the elements.

这就是使用 object 作为元素类型的结果。您仍然有多种选择:

  • 如果可以创建一个类来表示列表项,问题就解决了
  • 如果您可以在使用它的同一上下文中创建您的列表,则可以使用 var 来捕获匿名类型
  • 如果您没有这些选项中的任何一个,请转换为dynamic 并放弃静态类型检查

第二个选项看起来像这样:

var list = (new[] {
    new {Prop1 = 45, Prop2 = "foo", Prop3 = 4.5}
,   new {Prop1 = 14, Prop2 = "bar", Prop3 = 3.1}
}).ToList();
...
var filtered = list.Where(x => x.Prop1==45).ToList();

第三个选项看起来像这样:

var filtered = _list
    .Cast<dynamic>()
    .Where(x => x.Prop1==45) // <<== No static type checking here
    .Cast<object>()
    .ToList();

关于c# - 将 LINQ 用于类型对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47953900/

相关文章:

c# - 如何在 mailbee LoadMessage 的路径中进行串联

c# - system.windows.forms.sendkeys.sendwait 在窗口最大化时不起作用

asp.net - LINQ 中的匿名类型成员声明符无效

C# LINQ - 读取 XML

c# - 使用命令行构建 Office 插件时出错

c# - .Net Core 2.1 - 无法访问已处置的对象。对象名称 : 'IServiceProvider'

c# - 让EditorWindow的最后一个EditorGUILayout填充剩余空间?

c# - 使用来自 XML 文件的单独元素

c# - 使用传入两个参数的linq查询实体

c# - 迭代字符串数组并替换(如果存在)