How to list all Variables of Class

前端 未结 5 1633
情书的邮戳
情书的邮戳 2020-11-27 05:49

Is there a way to list all Variables (Fields) of a class in C#. If yes than could someone give me some examples how to save them in a List and get them maybe us

相关标签:
5条回答
  • 2020-11-27 06:16

    Not quite the question asked - but here's how to get the values of all properties of type Decimal from an object called "inv":

    var properties = inv.GetType().GetProperties();
    
    foreach (var prop in properties)
    {
        if (prop.ToString().ToLower().Contains("decimal"))
        {
            totalDecimal += (Decimal)prop.GetValue(inv, null);
        }
    }
    
    0 讨论(0)
  • 2020-11-27 06:24
    var fields = whateverYourClassType.GetType().GetFields().Select(f => f.Name).ToList();
    
    0 讨论(0)
  • 2020-11-27 06:31

    Your question isn't perfectly clear. It sounds like you want the values of the fields for a given instance of your class:

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

    Note that fieldValues is List<object>. Here, foo is an existing instance of your class.

    If you want public and non-public fields, you need to change the binding flags via

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

    If you merely want the names:

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

    Here, Foo is the name of your class.

    0 讨论(0)
  • 2020-11-27 06:33
    myClass.GetType().GetProperties()
    
    0 讨论(0)
  • 2020-11-27 06:36

    This will list the names of all fields in a class (both public and non-public, both static and instance fields):

    BindingFlags bindingFlags = BindingFlags.Public |
                                BindingFlags.NonPublic |
                                BindingFlags.Instance |
                                BindingFlags.Static;
    
    foreach (FieldInfo field in typeof(TheClass).GetFields(bindingFlags))
    {
        Console.WriteLine(field.Name);
    }
    

    If you want to get the fields based on some object instance instead, use GetType instead:

    foreach (FieldInfo field in theObject.GetType().GetFields(bindingFlags))
    {
        Console.WriteLine(field.Name);
    }
    
    0 讨论(0)
提交回复
热议问题