gpt4 book ai didi

c# - 使用反射从静态类内部的静态类中获取所有字段

转载 作者:可可西里 更新时间:2023-11-01 07:52:35 25 4
gpt4 key购买 nike

我有一个包含很多静态类的静态类。每个内部静态类都包含字段。我想获取所有内部静态类的所有字段。

public static class MyClass
{
public static class MyInnerClass1
{
public const string Field1 = "abc";
public const string Field2 = "def";
public const string Field3 = "ghi";
}
public static class MyInnerClass2
{
public const int Field1 = 1;
public const int Field2 = 2;
public const int Field3 = 3;
}
...
}

我想打印出每个内部类的名称,后跟每个字段的名称和值。

例如:

MyInnerClass

Field1 = "abc"

...

获取所有类的名称我没有问题:

var members = typeof(MyClass).GetMembers(BindingFlags.Public | BindingFlags.Static);

var str = "";
foreach (var member in members)
{
str += member.Name +" ";
}

或者特定类中所有字段的名称和值:

var fields = typeof(MyClass.MyInnerClass1).GetFields();
foreach (var field in fields)
{
str += field.Name + "-";
str += field.GetValue(typeof(MyClass.MyInnerClass1));
}

但是我该如何结合呢?内部静态类的名称和数量可能会发生变化。

最佳答案

尝试以下操作

var builder = new StringBuilder();
foreach (var type in typeof(MyClass).GetNestedTypes(BindingFlags.Public | BindingFlags.NonPublic))
{
if (!type.IsAbstract)
{
continue;
}

builder.AppendLine(type.Name);
foreach (var field in type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static)) {
var msg = String.Format("{0} = {1}", field.Name, field.GetValue(null));
builder.AppendLine(msg);
}
}

string output = builder.ToString();

!type.IsAbstract 的使用是为了去除非静态嵌套类型。 C# 中的静态类型在后台生成为 abstract

此外,我的解决方案将获取 public 和非 public 成员(类型和字段)。我不确定这是否是您的意图,因此您可能想要修改我的解决方案的那一部分。

关于c# - 使用反射从静态类内部的静态类中获取所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15366725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com