[英]How to Store a list of Design-Time data
我的数据中有以下结构:
Category0
-SubCategory0
-SubCategory1
-SubCategoryN
Category1
-SubCategory1_0
-SubCategory1_1
-SubCategory1_N
一个类别将有一个名称、一个描述和一个唯一的 Integer 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
该列表在设计时是已知的,我需要绑定到列表视图。 我想将描述绑定为列表视图每一行的显示文本,并将值(object 或具有名称和 ID 的枚举)绑定为相应的值成员。
存储此信息的最佳方法是什么? 我应该创建大量枚举吗? 或者我应该使用分隔字符串(例如“Ford:Mondeo:Some Text: 12324”)在设计器模式下直接绑定到列表视图,然后根据需要进行解析和提取。 也许最好让数据存储具有 id/description 值的自定义属性的强类型枚举,例如绑定到一个字典,其中字符串是描述,CarType 是 class,具有以下属性:Make(Ford):enum, Model(Modeo ):enum 和 Id(12324):int?
通常你会 model 这个有两个类:
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; }
}
如果您担心比较中的性能,并且您确切地知道所有制造商和 model 名称,您应该考虑将名称更改为枚举。 此外,如果您将按名称访问这些项目,则应考虑将它们保存在以名称为键的字典中。
这听起来像是 XML 的完美用途。 您可以添加/删除类别,更改名称和描述的值等。将其解析为简单的 class 结构...
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; }
}
然后您只需将这些类绑定到您的视图。
仅仅因为它在设计时就知道并不是一个足够好的理由来 go 并创建大量重复的冗余代码。 它使您的程序更难维护。 是的,查找对 XML(或任何数据文件)感到不舒服的人更简单,但如果发生变化 - 您需要向类别添加另一个属性,例如 - 您需要 go 并更改每个 ZA2F2ED4F8EBC2CBBD4C2 / enADCum.9EBC2CBBD4C2 / en 凌乱而乏味。
编辑:澄清一下,当我说 XML 这只是我的首选格式时。 您还可以将数据存储为文本 CSV,无论您喜欢哪种格式。 我更喜欢 XML 因为它更容易使用。
edit2:我看到你的担忧( if(carListView.SelectedValue == "Mondeo")
)。 在不知道(或想知道)您的整个系统或您正在尝试做什么的情况下,我宁愿以更通用的、以 object 为重点的方式工作。
所以你需要为每种类型的汽车提供一个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();
这样就不会遍历整个列表。 再次,减少行数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.