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