我想从存储在另一个系统中的树中检索值。例如:
GetValue("Vehicle.Car.Ford.Focus.Engine.Oil.Color")
为了避免输入错误和无效键,我想在编译时通过创建一个包含树结构的对象或类来检查名称:
GetValue(Vehicle.Car.Ford.Focus.Engine.Oil.Color)
在 C# 中是否有一种简单的方法可以在不为每个树节点创建类的情况下执行此操作?我可以使用匿名类或子类吗?我应该自动创建代码吗?
我想从存储在另一个系统中的树中检索值。例如:
GetValue("Vehicle.Car.Ford.Focus.Engine.Oil.Color")
为了避免输入错误和无效键,我想在编译时通过创建一个包含树结构的对象或类来检查名称:
GetValue(Vehicle.Car.Ford.Focus.Engine.Oil.Color)
在 C# 中是否有一种简单的方法可以在不为每个树节点创建类的情况下执行此操作?我可以使用匿名类或子类吗?我应该自动创建代码吗?
如果你想要编译时检查,你需要以某种方式使用编译时构造来定义你的结构。您可以使用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";
}
}
}
}
}
}
命名空间和静态类
namespace Vehicle.Car.Ford.Focus.Engine
{
public static class Oil
{
public static readonly string Color =
"Vehicle.Car.Ford.Focus.Engine.Oil.Color";
}
}
(请注意,您不能同时拥有 namespace 中的类和Ford
namespaceVehicle.Car
中的类Vehicle.Car.Ford
。)
尝试这样的事情:
var Vehicle = new { Car = new { Ford = new { Focus = new { Engine = new { Oil = new {Color = "Red"}}}}}};
现在您可以通过智能获取每个值。
虽然我更喜欢@dtb 方法。我仍然认为我的方法很轻。
您可能可以找到使用 C# 扩展方法的方法:http: //msdn.microsoft.com/en-us/library/bb383977.aspx
但是可能无法摆脱一些自动代码生成