我想從存儲在另一個系統中的樹中檢索值。例如:編譯時間樹結構
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 text template自動從樹結構中生成代碼。
我能想到的可能途徑:
嵌套靜態類
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";
}
}
(請注意,你不能同時擁有命名空間Vehicle.Car
和cl中的Ford
類驢在命名空間Vehicle.Car.Ford
)
你或許可以找到一種方法,用C#擴展方法做到這一點:http://msdn.microsoft.com/en-us/library/bb383977.aspx
,不過也許沒有逃避一些自動代碼生成
嘗試一些像這樣的事情:
var Vehicle = new { Car = new { Ford = new { Focus = new { Engine = new { Oil = new {Color = "Red"}}}}}};
現在,你可以得到intellisence每個值。
雖然我更喜歡@dtb方法。不過,我認爲我的方法非常輕。
你可以(應該)自動創建代碼 – sehe 2011-06-09 07:59:51
你的意思是說,這就像一個類層次結構? – 2011-06-09 08:00:16
是的,一個類層次結構。 Oil.Color可能是一個包含密鑰的字符串。 – Sjoerd 2011-06-09 08:06:08