我有這樣一個viewModel,我想檢查accessGroupList是否有True的值,并根據這個值設定baccess。如果它們都是假的,那么baccess將是假的,但如果其中一個是真的,baccess將是真的。
MemberViewModel result = new MemberViewModel()。
result.IsPractices = true;
result.IsUser = false;
var accessGroupList = new List<string>();
accessGroupList.Add("IsUser")。
accessGroupList.Add("IsBestPractices")。
var baccess = result.GetType().GetProperties().First(o => o.Name == accessGroupList).GetValue(result, null);
bool? baccess = Property as bool?;
uj5u.com熱心網友回復:
首先要注意,accessGroupList是一個串列,你需要使用Contains或Any來比較它和屬性名。然后你可以選擇那些出現在accessGroupList中的屬性值
var baccess = result.GetType() .GetProperties()
.Where(o => accessGroupList.Contains(o.Name))
.Select(t=> (bool)t.GetValue(result, null))。
uj5u.com熱心網友回復:
var baccess = result.GetType() .GetProperties()
.Where(o => accessGroupList.Any(propName => Equals(propName, o.Name))
.Select(x => (bool)x.GetValue(result, null)
.Any(val => val)。
你的問題是,你使用的是.First(只會回傳一個專案),但是在那里,你也在將屬性名稱與串列本身進行比較。你需要做另一個linq操作來獲取相應的屬性,然后你可以檢查這些屬性中是否有一個值為true
。uj5u.com熱心網友回復:
我創建了這個簡單的控制臺專案。你可以這樣做,在你的專案中使用時從哪里洗掉注釋
class Program<
{
static void Main(string[] args)?
{
var cl = new MyClass()。
cl._item1 = false;
cl._item2 = false;
var a = cl.GetType().GetProperties()。
//.Where(x => accessGroupList.Contains(x.Name))/span>
.Select(x => new)
{
name = x.Name,
value = (bool)x.GetValue(cl, null)
})
.Any(x => x.value)。
Console.WriteLine(a);
}
}
public class MyClass
{
public bool _item1 { get; set; }
public bool _item2 { get; set; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/327596.html
標籤:
