[英]linq 'where' with using reflection doesn't work
我正在尝试使用 linq 和反射来获取项目:
var type = "Home";
var list = new List<object>();
... some initialization
var selectedItems = list.Where(x => x.GetType().GetProperty("Type").GetValue(x) == type);
进入selectedItems
我想得到 2 个项目(符合条件),但我得到一个
这段代码有什么问题? 提前致谢
如果您尝试查找给定类型的列表元素,您只需与该类型的全名进行比较:
var selectedItems = list.Where(x => (string)x.GetType().FullName == type);
相反,如果您想查询名为 Type 的列表中的类属性,您现有的代码可以工作:
var type = "Home";
var list = new List<object>()
{
new Home(),
new Business()
};
abstract public class Base
{
public abstract string Type { get; }
}
public class Home : Base
{
public override string Type => "Home";
}
public class Business : Base
{
public override string Type => "Business";
}
// This works (you have to cast GetValue() to string)
var selectedItems = list.Where(x => (string)x.GetType().GetProperty("Type").GetValue(x) == type);
如果这是您的方案并且相关属性未公开,请更改
GetProperty("Type")
至
GetProperty("Type", BindingFlags.NonPublic | BindingFlags.Instance)
我只需要将属性转换为一种类型:
var selectedItems = list.Where(x => Equals(x.GetType().GetProperty("Type").GetValue(x), type))
这个问题很难说清楚,但可能你想要这个?:
var list = new List<object>();
var selectedItems = list.OfType<Home>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.