什么C#数据类型应该用于部分不变的信息集?

时间:2016-02-21 07:49:52

标签: c#

我正在编写一个用棒球统计数据做一些事情的C#应用​​程序。我从XML Web服务获取数据。我想完全分离演示文稿 - 业务数据层。我徒劳地创建了一个服务类来与Web服务交互,并从数据创建对象,一组业务类(即播放器,团队,联盟)以及我的表示层所需的对象。

我不想将统计信息加载到播放器类中,因为有超过200个统计信息,而且每次实例化播放器类时我都不需要它们。对于每个统计信息,我需要它的缩写,描述,XML属性名称和值。

问题:可以使用哪些C#数据结构或方法来呈现两个以上的属性,并允许其中的几个属性在数据类型的所有实例中保持静态,并允许至少一个在运行时可写吗

我开始制作一个"统计数据"像这样的课:

public class BaseballStatistic
{
    public string Abbreviation;
    public string Description;
    public string XmlAttributeName;
    public string Value;

    public BaseballStatistic(string abbreviation, string description, string xmlAttributeName)
    {
        Abbreviation = abbreviation;
        Description = description;
        XmlAttributeName = xmlAttributeName;
    }
}

这个问题是我永远不需要在运行时更改缩写,描述或XML属性名称。

  • 如果我只需要缩写和值,我会使用字典或其他键/值对。
  • 我开始创建一个包含缩写,描述,XML属性名称和值成员的统计类。但是那些在运行时会改变的唯一一个就是价值 - 所以这并不是正确的答案。 (想象一下500名玩家,每个玩家都有一系列统计对象,除了价值之外,所有玩家的对象都是完全相同的。)
  • 我考虑过创建一个多维数组,但是有这么多常量值,在运行时加载这样的东西似乎很浪费。

我觉得我应该知道这一点。

我应该补充一点:因为我可以使用很多不同的统计数据,如果我找到一个可以将它们暴露给Intellisense的解决方案,那就太棒了。例如:

  

统计g = Stats.G amesPlayed

1 个答案:

答案 0 :(得分:5)

听起来你需要一个班级用于&#34;统计&#34; - 然后是Dictionary<PlayerStat, int>(或任何值)。

PlayerStat类会知道缩写,描述和XML属性名称 - 我建议你可以静态地创建一个Dictionary<string, PlayerStat>来映射从缩写到统计,另一个从XML属性映射到缩写。

您可能甚至不需要Dictionary<PlayerStat, int>课程中的Player ...您可以随时添加一个懒惰地查找内容的索引器或方法。 (但要小心这一点 - 你可能会发现懒散加载很多东西比一次加载所有东西都要贵。你可能想要将统计数据分成几类,并在加载一个类别时加载所有统计数据基本上,如果有一堆通常一起使用的统计数据......)