簡體   English   中英

使用反射的 linq 'where' 不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM