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

时间:2014-02-07 21:11:41

标签: c# .net

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

2 个答案:

答案 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)可以正常工作,并将检索所有符合给定标志的成员。