繁体   English   中英

如何存储设计时数据列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM