我的数据中有以下结构:
Category0
-SubCategory0
-SubCategory1
-SubCategoryN
Category1
-SubCategory1_0
-SubCategory1_1
-SubCategory1_N
类别将具有NAME,描述和唯一整数ID
e.g。
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。我想将list作为显示文本绑定在listview的每一行,并将值(一个对象或带有Name和Id的枚举)绑定为相应的值成员。
存储此信息的最佳方法是什么?我应该创建大量枚举吗?或者我应该使用分隔字符串(例如“Ford:Mondeo:Some Text:12324”)直接绑定到设计器模式下的listview,然后根据需要进行解析和提取。也许最好让数据存储具有id / description值的自定义属性的强类型枚举,例如绑定到字典,其中string是描述,CarType是具有属性的类:Make(Ford):enum,Model(Modeo) ):enum和Id(12324):int?
答案 0 :(得分:0)
通常,您会使用两个类对此进行建模:
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; }
}
如果您担心比较中的性能,并且您确切知道所有制造商和型号名称,则应考虑将名称更改为枚举。 此外,如果您要按名称访问这些项目,则应考虑将其保存在名称为密钥的字典中。
答案 1 :(得分:0)
这听起来像是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(或任何数据文件)感到不舒服的人更容易,但是如果有什么变化 - 你需要在类别中添加另一个属性 - 例如 - 你需要去改变每一个类/枚举。凌乱而乏味。
编辑:只是为了澄清,当我说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();
这种方式没有循环遍历整个列表。再次,保持你的行数。