我有一个类数组,我想迭代该类的字段/属性。我尝试使用以下代码,但它返回null
foreach (var account in invalidAccount)
{
var invalidData = from p in typeof(InvalidAccounts).GetProperties()
where p.GetValue(account).ToString().ToLower().Equals("false")
select p.Name;
}
答案 0 :(得分:1)
要获取所有属性 - 请使用
之类的代码 List<PropertyInfo> allProperties =
typeof (InvalidAccounts).GetProperties(BindingFlags.Instance | BindingFlags.Public)
.ToList();
//Write out all properties to a console as a demo
allProperties.ForEach(Console.WriteLine);
要获取所有字段 - 请使用
之类的代码List<FieldInfo> allFields =
typeof(InvalidAccounts).GetFields(BindingFlags.Instance | BindingFlags.NonPublic)
.ToList();
//Write out all fields to a console as a demo
allFields.ForEach(Console.WriteLine);
我认为您需要修改原始代码以指定相关的绑定标志 - 所以您的查询有点像
PropertyInfo myAccount = typeof (InvalidAccounts)
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.First(x => x.GetValue(account, null)
.ToString()
.Equals("false", StringComparison.InvariantCultureIgnoreCase));
我在这里猜测一下 - 因为我发现你很难看到你想要达到的目标(或者更确切地说 - 为什么)。
您需要指定绑定标志,以指示您感兴趣的对象上属性的存在方式。链接:http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags(v=vs.110).aspx
答案 1 :(得分:0)
上面的代码工作正常,但是当且仅当你在类上有公共实例属性时。要获取字段,必须使用.GetFields,因为它们本身与属性不同,如果您想获得除公共实例属性/值之外的任何内容,则需要使用其中一个支持{{3 }}
请注意,相反的标志(例如BindingFlags.Public | BindingFlags.NonPublic
)可以正常工作,并将检索所有符合给定标志的成员。