【问题标题】:How to get list of child class of a parent class? [duplicate]如何获取父类的子类列表? [复制]
【发布时间】:2018-03-22 15:09:43
【问题描述】:

是否可以获得Parent的类名列表和ChildA类中的字段名列表:

我创建了这个类来定义配置代码(因为我不想用string,它不稳定,不好管理):

public class CodeConfiguration
    {
        public class ModuleA
        {
            public const string GroupA = "ProvinCode";
            public const string GroupB = "CountryCode";
        }
        public class ModuleB
        {
            public const string GroupC = "ImportStatus;
            public const string GroupD = "ExecuteStatus";
        }
    }

在数据库中,我的数据表如下

Module  Group   Code    Name
ModuleA GroupA  1       100
ModuleA GroupB  2       1001
ModuleB GroupC  1       Imported
ModuleB GroupD  2       Failed

所以现在我需要获取Module Combobox 和Group Combobox 的数据 我的预期结果:

模块组合框:{"ModuleA","ModuleB} 模块 A 的 Group Combobox:{"GroupA","GroupB"}

【问题讨论】:

  • 简短回答:是的。
  • 但是你不应该想要这个。一方面,不鼓励公共嵌套类。
  • 请注意,您询问了“ChildA 类中变量名的列表”,但没有显示任何内容...您确定您使用了正确的术语吗?在找吗?
  • 我已更新我的问题以显示我的预期结果。
  • 那些不叫变量,那些叫字段,

标签: c# class


【解决方案1】:

您可以通过以下方式获取嵌套类名列表:

var nestedClasses = typeof(CodeConfiguration)
    .GetNestedTypes()
    .Select(_ => _.Name)
    .ToList();

如果您想包含私有嵌套类,请将 BindingFlags.Public | BindingFlags.NonPublic 作为参数传递给 .GetNestedTypes() 方法。

获取字段名称列表:

var fieldNames = typeof(CodeConfiguration.ModuleA)
    .GetFields()
    .Select(_ => _.Name)
    .ToList();

要包含私有字段,请将BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance 作为参数传递给.GetFields() 方法。


另见Reflection in the .NET Framework

【讨论】:

  • 谢谢兄弟,我已经更新了我的问题中的类名,所以我也在你的答案中更新了它们
  • 你好兄弟,代替 typeof(CodeConfiguration.ModuleA),是否可以使用像 typeof("ModuleA") 这样的字符串名称?
  • typeof 不支持字符串作为参数,但您可以改用Type.GetType(name)Assembly.GetType(name)
  • 我试过 Type.GetType("MyNamespace.CodeConfiguration.ModuleA") 但它是空的。
  • Assembly,GetType() 不同,Type.GetType() 的参数必须是程序集限定名称 - 请参阅 docs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多