我有一个类型对象列表
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/