如何存储设计时数据列表
本文关键字:数据 列表 何存储 存储 | 更新日期: 2023-09-27 18:05:11
我的数据中有以下结构:
Category0
-SubCategory0
-SubCategory1
-SubCategoryN
Category1
-SubCategory1_0
-SubCategory1_1
-SubCategory1_N
一个类别将有一个NAME,一个Description和一个唯一的整数ID
。
Category = Ford Description = "USA Car" Id = 12345678
-SubCategory: Name = Mondeo Description = "Some text" Id = 12324
-SubCategory: Name = Fiesta Description = "Some text" Id = 9999
-SubCategory: Name = Orion Description = "Some text" Id = 123456
-SubCategory: Name = Focus Description = "Some text"Id = 8799
列表在设计时是已知的,我需要绑定到listview。我想将Description绑定为listview每行上的Display Text,并将值(具有Name和Id的对象或枚举)绑定为相应的valuemember。
存储这些信息的最佳方法是什么?我应该创建大量枚举吗?或者我应该在设计器模式下使用分隔字符串(如"Ford:Mondeo:Some Text: 12324")直接绑定到listview,然后根据需要进行解析和提取。也许这将是更好的数据存储强类型枚举自定义属性的id/描述值,例如绑定到一个字典,其中字符串是一个描述和CarType是一个类的属性:Make(Ford):enum, Model(Modeo):enum和id (12324):int?
通常你会用两个类来建模:
public class Model
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class Manufacturer
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public List<Model> Models { get; set; }
}
如果您关心比较中的性能,并且您确切地知道所有制造商和型号名称,则应该考虑将名称更改为枚举。此外,如果您将按名称访问这些项,则应该考虑将它们保存在字典中,并以名称作为键。
这听起来像是XML的完美用途。您可以添加/删除类别,更改名称&描述等。解析成一个简单的类结构…
public class ParentCategory : Category
{
public List<Category> SubCategories { get; set; }
}
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
然后你只需将这些类绑定到你的视图。
仅仅因为它在设计时是已知的,并不是一个足够好的理由去创建大量的重复,冗余的代码。它使您的程序更加难以维护。是的,寻找不熟悉XML(或任何数据文件)的人更简单,但是如果发生了变化——例如,您需要向类别添加另一个属性——您需要去更改每个类/enum。又乱又乏味。
只是为了澄清,当我说XML只是我喜欢的格式。您还可以将数据存储为文本、CSV或任何您喜欢的格式。我更喜欢XML,因为它更容易使用。 edit2: 我明白你的担忧(if(carListView.SelectedValue == "Mondeo")
)。如果不知道(或者想知道)你的整个系统或者你想做什么,我更喜欢用一种更通用的、以对象为中心的方式工作。
所以每种类型的汽车都需要一个if
语句?为什么不让汽车自己工作呢?
public class ParentCategory : Category
{
public List<Category> SubCategories { get; set; }
public void DoThings()
{
// look at SubCategories, print something, etc
}
}
// and then get the item to do things!
((ParentCategory)carListView.SelectedValue).DoThings();
这样就不会循环遍历整个列表。同样,尽量减少行数