Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# Reflection - Get field values from a simple class

Tags:

c#

reflection

I have a class:

class A {     public string a = "A-val" , b = "B-val"; } 

I want to print the object members by reflection

//Object here is necessary. Object data = new A(); FieldInfo[] fields = data.GetType().GetFields(); String str = ""; foreach(FieldInfo f in fields){     str += f.Name + " = " + f.GetValue(data) + "\r\n"; } 

Here is the desired result:

a = A-val b = B-val 

Unfortunately this did not work. Please help, thanks.

like image 284
SexyMF Avatar asked Oct 04 '11 14:10

SexyMF


1 Answers

Once fixed to get rid of the errors (lacking a semi-colon and a bad variable name), the code you've posted does work - I've just tried it and it showed the names and values with no problems.

My guess is that in reality, you're trying to use fields which aren't public. This code:

FieldInfo[] fields = data.GetType().GetFields(); 

... will only get public fields. You would normally need to specify that you also want non-public fields:

FieldInfo[] fields = data.GetType().GetFields(BindingFlags.Public |                                                BindingFlags.NonPublic |                                                BindingFlags.Instance); 

(I hope you don't really have public fields, after all...)

like image 96
Jon Skeet Avatar answered Sep 19 '22 15:09

Jon Skeet