C# 迭代中类数组的字段/属性#

C# 迭代中类数组的字段/属性#,c#,.net,C#,.net,我有一个类数组,我想迭代该类的字段/属性。我尝试使用以下代码,但返回null foreach (var account in invalidAccount) { var invalidData = from p in typeof(InvalidAccounts).GetProperties() where p.GetValue(account).ToString().ToLower().Equals("false")

我有一个类数组,我想迭代该类的字段/属性。我尝试使用以下代码,但返回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;
}

上面的代码工作正常,但前提是类上有公共实例属性。要获取字段,必须使用.GetFields,因为它们与属性有本质的区别,如果您想获取公共实例属性/值以外的任何内容,则需要使用支持的重载之一


请注意,相反的标志(如
BindingFlags.Public | BindingFlags.NonPublic
)工作正常,将检索符合给定标志之一的所有成员。

要获取所有属性,请使用类似于

 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);
我在这里有点猜测,因为我发现很难看到你想要实现什么(或者更确切地说,为什么)


您需要指定绑定标志,以指示您感兴趣的对象上属性的存在方式。链接:

您是否尝试过以这种方式分解LINQ表达式,以获得可检查调试的逐步中间结果?我正在尝试获取类InvalidAccounts数组中值等于false的所有属性的名称。请使用“where”而不是“first”。如果已正确指定绑定标志,则查询仍应有效。
PropertyInfo myAccount = typeof (InvalidAccounts)
    .GetProperties(BindingFlags.Public | BindingFlags.Instance)
    .First(x => x.GetValue(account, null)
                .ToString()
                .Equals("false", StringComparison.InvariantCultureIgnoreCase));