创建动态二维数组,根据c#wpf中的列表自动调整

时间:2015-02-11 10:42:40

标签: c# .net wpf

假设我有一个C#类的对象列表。我希望有一个2d数组(或列表列表,或其他可以做同样的事情),它可以保存列表中所有对象之间关系的信息。该课程可能如下所示:

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数组应在两个方向上增长,并且当删除元素时,表/数组应在两个方向上缩小。

上面代码中声明的二维数组显然不适用于此。相反,我想知道&#39; SimpleRoute&#39; class可以某种方式保留ObservableCollection&#39;点&#39;,并在内部维护距离数据表。

稍后我希望能够将来自2d数组/表的数据 - 或者来自其后面/周围的类 - 存储在XML中(通过序列化)并且能够再次加载它(通过反序列化)。与&#39; SimplePoints&#39;的列表的关系应该保持。 最后,自动调整表中的数据(即距离)应该由用户编辑。我将使用WPF创建GUI。

我想知道在C#/ .NET中最好的方法是什么,但是很难想到优雅的东西。搜索hasen取得了很多结果,但我可能会在错误的地方找。

也许有一些简单的解决方案?我比较熟悉.NET编程。

1 个答案:

答案 0 :(得分:0)

我认为您要求提供有关.net /一般OOP实践的相当大的域名的信息,因此如果没有一点上下文,提供一个体面的答案真的很难,但我&#39 ;试着给你一些指示。

我假设您有两个类,比如Group和Person,具有以下简单定义:

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;
    }
}

您已创建一个与对象Person具有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),我可以修改我的代码来帮助你。