假设我有一个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编程。
答案 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),我可以修改我的代码来帮助你。