下面是一個例子角色<>對於分層數據結構
class A
{
public string Text = "";
public IEnumerable<A> Children = new List<A>();
}
class B
{
public string Text;
public IEnumerable<B> Children = new List<B>();
}
static void Main(string[] args)
{
// test
var a = new A[]
{
new A() { Text = "1", Children = new A[]
{
new A() { Text = "11"},
new A() {Text = "12"},
}},
new A() { Text = "2", Children = new A[]
{
new A() {Text = "21", Children = new A[]
{
new A() {Text = "211"},
new A() {Text = "212"},
}},
new A() {Text = "22"},
}},
};
B[] b = a ...; // convert a to b type
}
我原來的問題是階層數據A
在模型,其具有要被顯示在視圖中,因此我要創建在視圖模型B
類型與INotifyPropertyChanged
等。對於分層數據,從A
轉換爲B
似乎比簡單的linq Cast<>
更復雜。
如果有人要嘗試的代碼,然後here是不錯討人喜歡的功能,可以像這樣使用:
foreach (var item in b.Flatten(o => o.Children).OrderBy(o => o.Text))
Console.WriteLine(item.Text);
你要自我接聽,不是更新的問題相匹配的答案嗎?不確定你在尋找什麼樣的幫助。假設你已經有了遞歸的代碼,那麼用你擁有的以及爲什麼它不適合你更新問題會很好。 –
@AlexeiLevenkov,你說的遞歸?出於某些原因,我無法做到這一點,最近的想法是先將'a',然後'Cast <>'拉扁,然後解開。我堅持不放鬆。也許我太過於複雜了?如果這聽起來很容易,你可以請發表一個答案嗎? – Sinatr
Sinatr,由StripligWarior(downvoted出於某種奇怪的原因)的答案完美的工作,可能是最短的代碼,你需要寫。 –