2015-02-11 148 views
0

假設我有一個C#類的對象列表。我希望有一個二維數組(或列表清單,或其他可以做同樣的事情),可以保存列表中所有對象之間關係的信息。該類可能如下所示:創建動態二維數組,基於c#中的列表自動調整wpf

public class SimplePoint 
{ 
    public string strName{ get; set; } 
}; 

public class SimpleRoute 
{ 
    public int iDistance{ get; set; } 
}; 

public class Place 
{ 
    public ObservableCollection<SimplePoint> points; 

    // Below array should dynamically increase/decrease size 
    // depending on length of list of points 
    // The array should store 2 values for each possible set of points: 
    // distance from x to y, and distance from y to x 
    public SimpleRoute[, ] routes; 
}; 

對於列表中的每個元素,2d數組/表應該有一行和一列。當一個元素被添加到列表中時,2d數組應該在兩個方向上增長,並且當元素被刪除時,表/數組應該在兩個方向上收縮。

在上面的代碼中聲明的二維數組顯然不適用於此。相反,我想知道'SimpleRoute'類是否可以以某種方式獲得ObservableCollection的'點',並在內部維護距離數據表。

後來我希望還能夠將XML數據(通過序列化)存儲在2d數組/表中 - 或者從它後面/後面的類中存儲數據,並能夠再次加載它(通過反序列化)。應該保持與'SimplePoints'列表的關係。 最後,自動調整表中的數據(即距離)應該由用戶編輯。我將使用WPF創建GUI。

我想知道在C#/。NET中這是最好的方法是什麼,但很難想到優雅的東西。搜索hasen't取得了很多結果,但我可能在錯誤的地方看。

也許有一些簡單的解決方案?我相對較新的.NET編程。

+0

如果您對自己的需求更加具體,例如說明您映射的數據類型以及您映射的內容,則可以改進您的問題。 「對象」的意思幾乎是一切。 – 2015-02-11 11:05:19

+0

謝謝@JoãoMiguelBrandão您的回答和建議。我編輯了這個問題,希望它能更清楚地表明我正在尋找什麼。 – mennowo 2015-02-11 11:27:43

+0

也許你想在每個SimpleRoute裏面有一個字典>? – 2015-02-11 12:23:21

回答

0

我認爲你需要了解.net /通用OOP實踐的一個很大的領域的信息,所以很難提供沒有一點背景的體面的答案,但我會盡力給你一些指針。

我假設你有兩個班,說集團和人,用以下簡單的定義:

class Group 
{ 
    public string name { get; set; } 
    public List<Person> Persons = new List<Person>(); 
} 
class Person 
{ 
    public string name { get; set; } 
    public int age { get; set; } 
    public Person(string name, int age) 
    { 
     this.name = name; 
     this.age = age; 
    } 
} 

您已經創建了與1對象組:N關係對象的人。 您可以用下面的測試功能測試這個方法:

public static void test() 
{ 
    Group group =new Group(); 
    group.name= "Friends"; 

    Person p = new Person("John",30); 
    Person p2 = new Person("Rute",25); 
    Person p3= new Person("Richard",17); 

    group.Persons.Add(p); 
    group.Persons.Add(p2); 
    group.Persons.Add(p3); 

    foreach(Person person in group.Persons) 
    { 
     Console.WriteLine("{0} is {1} years old. He is in group {2}.",person.name,person.age,group.name); 
    } 
} 

這是你的原意?如果你想創建一個不同類型的關係(N:N,N:1),我可以修改我的代碼來幫助你。