编译时间树结构

Sjo*_*erd 5 c# tree class-hierarchy compile-time

我想从存储在另一个系统中的树中检索值.例如:

GetValue("Vehicle.Car.Ford.Focus.Engine.Oil.Color")
Run Code Online (Sandbox Code Playgroud)

为了避免键入错误和无效键,我想在编译时通过创建一个具有树结构的对象或类来检查名称:

GetValue(Vehicle.Car.Ford.Focus.Engine.Oil.Color)
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法在C#中执行此操作而不为每个树节点创建类?我可以使用匿名类或子类吗?我应该自动创建代码吗?

dtb*_*dtb 4

如果您想要编译时检查,则需要以某种方式使用编译时构造来定义结构。您可以使用T4 文本模板从树结构自动生成代码。

我能想到的可能方法:

嵌套静态类

public static class Vehicle
{
    public static class Car
    {
        public static class Ford
        {
            public static class Focus
            {
                public static class Engine
                {
                    public static class Oil
                    {
                        public static readonly string Color =
                            "Vehicle.Car.Ford.Focus.Engine.Oil.Color";
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

命名空间和静态类

namespace Vehicle.Car.Ford.Focus.Engine
{
    public static class Oil
    {
         public static readonly string Color =
             "Vehicle.Car.Ford.Focus.Engine.Oil.Color";
    }
}
Run Code Online (Sandbox Code Playgroud)

(请注意,不能同时拥有Ford命名空间中的类Vehicle.Car和命名空间中的类Vehicle.Car.Ford。)