0

我的数据中有以下结构:

Category0  
 -SubCategory0  
 -SubCategory1  
 -SubCategoryN  

Category1  
-SubCategory1_0  
-SubCategory1_1  
-SubCategory1_N  

一个类别将有一个名称、一个描述和一个唯一的整数 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  

该列表在设计时是已知的,我需要绑定到列表视图。我想将描述绑定为列表视图每一行的显示文本,并将值(具有名称和 ID 的对象或枚举)绑定为相应的值成员。

存储此信息的最佳方法是什么?我应该创建大量枚举吗?或者我应该使用分隔字符串(例如“Ford:Mondeo:Some Text:12324”)在设计器模式下直接绑定到列表视图,然后根据需要进行解析和提取。也许最好将数据存储为具有 id/description 值的自定义属性的强类型枚举,例如绑定到字符串是描述且 CarType 是具有属性的类的字典:Make(Ford):enum, Model(Modeo ):enum 和 Id(12324):int?

4

2 回答 2

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

如果您担心比较中的性能,并且您确切知道所有制造商和型号名称,则应考虑将名称更改为枚举。此外,如果您将按名称访问这些项目,则应考虑将它们保存在以名称为键的字典中。

于 2011-08-11T23:28:33.720 回答
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,因为它更容易使用。

编辑2: 我看到你的担忧(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();

这样就不会遍历整个列表。再次,减少行数。

于 2011-08-12T00:06:44.833 回答