如何在 C# 中循环访问对象中的所有字段?

3 c# reflection

我有一个这样的对象:

public class Filters {
    public int var1 = 1, 
          var2 = 2, 
          var3 = 3;
}
Run Code Online (Sandbox Code Playgroud)

我在这里声明这个对象:

Filters filter1 = new Filters();
Run Code Online (Sandbox Code Playgroud)

我想循环访问var1var2、 并用它做一些事情。var3IE:

foreach (var prop in filter1.props) {
    Console.WriteLine(filter1[prop] + 3);
}
Run Code Online (Sandbox Code Playgroud)

输出将是:

4
5
6
Run Code Online (Sandbox Code Playgroud)

我想我需要使用 foreach 循环为每个属性做一个 foreach 循环 foreach(PropertyInfo p in filter1.GetType().GetProperties()),但我不知道如何 1) 循环遍历 props var1、var2、var3 和 2) 如何使用存储filter1在变量中的名称对 prop 进行子集化

ars*_*ars 5

如果您将变量描述为如下所示的属性,

public class Filters
{
    public int var1 { get; set; } = 1;
    public int var2 { get; set; } = 2;
    public int var3 { get; set; } = 3;
}
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式访问这些属性

GetType().GetProperties()

那么 main 方法会给你你所要求的

static void Main(string[] args)
{
    Filters filter1 = new Filters();

    foreach (var prop in filter1.GetType().GetProperties())
    {
        Console.WriteLine("{0}={1}", prop.Name, (int)prop.GetValue(filter1, null) + filter1.GetType().GetProperties().Length);
    }
        
    Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)

结果将是

var1=4
var2=5
var3=6
Run Code Online (Sandbox Code Playgroud)