2011-06-30 52 views
13

有没有办法在C#中列出一个类的所有变量(字段)。 如果是有人可以给我一些例子如何将它们保存在List并让他们使用Anonymous Types(var)。如何列出类的所有变量

+2

“变量”是指字段,属性还是两者? –

+0

Fields,sory我编辑了我的帖子。 – Burimi

+1

_Show me codez _...这里是文档:http://msdn.microsoft.com/en-us/library/sa5z9w50.aspx – sehe

回答

32

你的问题不是很清楚。这听起来像你想要的字段的值类的给定实例:

var fieldValues = foo.GetType() 
        .GetFields() 
        .Select(field => field.GetValue(foo)) 
        .ToList(); 

注意fieldValuesList<object>。在这里,foo是您班级的现有实例。

如果你想public和非public领域,你需要通过

var bindingFlags = BindingFlags.Instance | 
        BindingFlags.NonPublic | 
        BindingFlags.Public; 
var fieldValues = foo.GetType() 
        .GetFields(bindingFlags) 
        .Select(field => field.GetValue(foo)) 
        .ToList(); 

更改绑定的标志。如果你只是想名字:

var fieldNames = typeof(Foo).GetFields() 
          .Select(field => field.Name) 
          .ToList(); 

这里,Foo是名你的班。

+0

我得到一个“表达式不能包含lambda表达式”与此语法 –

2
var fields = whateverYourClassType.GetType().GetFields().Select(f => f.Name).ToList(); 
3
myClass.GetType().GetProperties() 
+0

他问关于字段而不是属性。 – user2913184

+0

他问变量不是字段。 –

8

这将列出所有字段的一个类名(包括公立和非公立,静态和实例字段):如果你想要得到的领域

BindingFlags bindingFlags = BindingFlags.Public | 
          BindingFlags.NonPublic | 
          BindingFlags.Instance | 
          BindingFlags.Static; 

foreach (FieldInfo field in typeof(TheClass).GetFields(bindingFlags)) 
{ 
    Console.WriteLine(field.Name); 
} 

基于一些对象实例,而不是使用GetType代替:

foreach (FieldInfo field in theObject.GetType().GetFields(bindingFlags)) 
{ 
    Console.WriteLine(field.Name); 
} 
+0

这对我有用。正试图获得我所有的枚举:'MyEnum enum =(MyEnum)0;' –

0

不太问问题 - 但这里是如何从一个名为“inv”的对象中获取Decimal类型的所有属性的值:

var properties = inv.GetType().GetProperties(); 

foreach (var prop in properties) 
{ 
    if (prop.ToString().ToLower().Contains("decimal")) 
    { 
     totalDecimal += (Decimal)prop.GetValue(inv, null); 
    } 
} 
相关问题