Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用字符串变量访问子类_C#_Unity3d - Fatal编程技术网

C# 如何使用字符串变量访问子类

C# 如何使用字符串变量访问子类,c#,unity3d,C#,Unity3d,我有一个类和子类的结构,如下所示: public class Regions { public const string UNITEDSTATES = "United States"; public static string[] members = { UNITEDSTATES}; public static class UnitedStatesTypes { public const strin

我有一个类和子类的结构,如下所示:

public class Regions
    {
        public const string UNITEDSTATES = "United States";
        public static string[] members = { UNITEDSTATES};

        public static class UnitedStatesTypes
        {
            public const string STEEL = "steel";
            public const string CONCRETE = "concrete";
            public static string[] members = { STEEL, CONCRETE };

            public static class SteelStandards
            {
                public const string A36 = "ASTM A36";
                public static string[] members = { A36 };

                public static class A36Grades
                {
                    public const string GRADE_36 = "Grade 36";
                    public static string[] members = { GRADE_36 };
                }
            public static class ConcreteStandards
            {
                ...
            }

每个类下都有更多的值,但这只是一个小示例,因此您可以了解它的外观。我正在尝试创建一个UI来选择其中的每一个。有4个下拉菜单,每个菜单由较高菜单的值填充。因此,如果标准下拉列表是在SteelStandards上,那么下一个下拉列表将填充A36,如果是在ConcreteStandards上,那么下一个下拉列表将填充ConcreteStandards下的数据。有没有一种方法可以使用字符串变量访问子类

例如,第一个下拉列表将选择美国。下一个下拉列表需要拼凑“UnitedStatesTypes”,然后访问Regions.UnitedStatesTypes.members。我试过用牙套

Regions["UnitedStatesTypes"].members

但这并不奏效。有没有办法做到这一点?或者有更好的方法来组织我的数据吗?

您可以只使用字典来完成这项工作,尽管当您走到树下时它会变得有点笨拙:

var regions = new Dictionary<string,Dictionary<string,Dictionary<string,Dictionary<string,List<string>>>>>();
// populate it. Yes I know how ugly that will look!
var usSteelStandards = regions["United States"]["Steel"]["Standards"];

实例:

您可以只使用字典来实现这一点,尽管当您走到树下时它会变得有点笨拙:

var regions = new Dictionary<string,Dictionary<string,Dictionary<string,Dictionary<string,List<string>>>>>();
// populate it. Yes I know how ugly that will look!
var usSteelStandards = regions["United States"]["Steel"]["Standards"];

实例:

四个嵌套的公共类?真的看起来是个很糟糕的设计,伊姆霍。似乎您应该有一个
字典
。您可以使用反射,但您需要一种方法将字符串“steel”映射到成员名称
SteelStandards
——这变得毫无意义。正如@Him所说的——你想要的是一本字典。用字典重新构造它。我怎样才能创建一本4级字典?高级字典会有“子字典”的值吗?@UltraSaucy一个包含
文本
&
子类的对象模型
-我来写一个答案。四个嵌套的公共类?真的看起来是个很糟糕的设计,伊姆霍。似乎您应该有一个
字典
。您可以使用反射,但您需要一种方法将字符串“steel”映射到成员名称
SteelStandards
——这变得毫无意义。正如@Him所说的——你想要的是一本字典。用字典重新构造它。我怎样才能创建一本4级字典?高级词典是否有“子词典”的值?@UltraSaucy包含
文本
&
子词典的对象模型
-我会写一个答案。
var node = new Node("root")
{
    {
        "United States", 
         new Node("Steel")
         {
             {
                 "ASTM A36",
                 new Node("Grade 36")
             }
         },
         new Node("Concrete")
         {

         }
    }
};

Console.WriteLine(node["United States"].Children.Count);
Console.WriteLine(node["United States"]["Steel"]["ASTM A36"].Children[0].Text);