C# 提议的数据及其容器的类结构?

C# 提议的数据及其容器的类结构?,c#,containers,class-design,C#,Containers,Class Design,首先,我谨祝所有读到这篇文章的人新年快乐:) 我在如何为导入到我的应用程序中的某些数据制作容器方面遇到了问题,我不确定如何很好地解释这一点,而且我的英语不是很好,因此我希望您能容忍我的错误,并帮助我提供一些指导 目前,我正在使用foreach从收到的数据导入以下字段: guid、itemid、名称、所有者(可选,可以为空)、zoneid、titleid、subid、heading、x、y、z、typeA、typeB、typeC 从上述字段中,我需要存储给定项目移动到的所有坐标的航路点列表,但对于

首先,我谨祝所有读到这篇文章的人新年快乐:)

我在如何为导入到我的应用程序中的某些数据制作容器方面遇到了问题,我不确定如何很好地解释这一点,而且我的英语不是很好,因此我希望您能容忍我的错误,并帮助我提供一些指导

目前,我正在使用foreach从收到的数据导入以下字段: guid、itemid、名称、所有者(可选,可以为空)、zoneid、titleid、subid、heading、x、y、z、typeA、typeB、typeC

从上述字段中,我需要存储给定项目移动到的所有坐标的航路点列表,但对于每个guid,我有一个新的航路点列表

从航路点列表中,第一个条目也是我的初始项目开始位置,这将是我的项目初始位置(如果您注意到我有一个单独的列表,我不确定是否更好),不是所有项目都有一个航路点列表,但所有项目都有第一个位置

所以我存储这些数据的第一个想法是一个包含两个内部类的类的列表:

public List<ItemList> myList = new List<ItemList>();
public class ItemList
{
    public int GuID { get; set; }
    public int ItemID { get; set; }
    public string Name { get; set; }
    public int TitleID { get; set; }
    public itemType Status { get; set; }

    public class Waypoint
    {
        public int Zone { get; set; }
        public int SubID { get; set; }
        public int Heading { get; set; }
        public float PosX { get; set; }
        public float PosY { get; set; }
        public float PosZ { get; set; }
    }
    public List<Waypoint> Routes = new List<Waypoint>();
}
然后,要注册一个新项目,我将利用上面的itemExist,这样我就不会再次注册相同的GUID:

                    ItemList newItem = new ItemList();
                    newItem.GuID = GUID;
                    newItem.ItemID = itemID;
                    newItem.Name = name;
                    newItem.Status = status;
                    newItem.TitleID = titleID;

                    // Item location
                    ItemList.Location itemLocation = new ItemList.Location();
                    itemLocation.SubID = subID;
                    itemLocation.Zone= zone;
                    itemLocation.Heading = convertHeading(heading);
                    itemLocation.PosX = posX;
                    itemLocation.PosY = posY;
                    itemLocation.PosZ = posZ;
                    newItem.position.Add(itemLocation);
                    myList.Add(newItem);
你能就我的班级结构和名单给我一些建议吗

是否有更好的方法与列表交互以获取GUID的lastWaypoint或验证项目是否存在

一般来说,你还有什么建议

PS:如果你有任何问题,或者如果有什么我错过了张贴请让我知道,我会更新它

更新:已更改以上内容,以反映我目前的情况,如果其他人还有我想听到的建议。

几点注意事项(喝了两杯香槟酒后……):

  • 您没有说明对数据结构及其使用的任何要求。你的设计看起来很合理
  • 您可以使用
    FirstOrDefault()
    方法检查项目是否存在(即返回值
    !=null
    ),并通过一次操作从列表中检索该项目
  • 您的代码有一个明显的错误:没有
    nextWaypoint!=空
    在添加新航路点之前进行检查,该航路点不需要存在。同样,不应存在
    lastWaypoint!=空
    必要时检查,因为列表不包含任何空值
  • 我建议在类中引入构造函数,接受强制属性的值
  • 没有明确的理由同时使用GUID和整数ID来标识
    ItemList
    ——然后搜索条件就被过度指定了
  • 常用的编码标准规定,属性名称应以大写字母(
    posX
    ⇒ <代码>PosX等)
  • 航路点
    位置
    列表也应为属性;只有一个getter并且有一个readonly字段作为后盾

附言:2011年,当新年来到你的时区并有很多好的代码时,祝你新年快乐;-)

您可以使用FirstOrDefault()方法来检查项目的存在性(即返回值!=null),并在一次操作中从列表中检索项目。
但这对我来说不可用,因为在航路点上,我不需要第一个,而需要最后一个,也不需要在我搜索项目之前,但这是上帝知道的<代码>明显的错误事实上,我是在重写它来发布在这里的,我可能跳过了过程中的重要部分
我建议引入构造器
我确实有,但我只是想用我怀疑的真正需要的信息来缩小帖子的规模。这几乎是呵呵;)谢谢,是的,酒店也是一种类型+一些饮料。。。呵呵,我确实从我的代码中复制并粘贴了一部分内容,但在这里发布的过程中重写了一些内容,可能最终会忘记。关于
FirstOrDefault
,这是一个很好的提示,因为它引导我到
LastOrDefault
                    ItemList newItem = new ItemList();
                    newItem.GuID = GUID;
                    newItem.ItemID = itemID;
                    newItem.Name = name;
                    newItem.Status = status;
                    newItem.TitleID = titleID;

                    // Item location
                    ItemList.Location itemLocation = new ItemList.Location();
                    itemLocation.SubID = subID;
                    itemLocation.Zone= zone;
                    itemLocation.Heading = convertHeading(heading);
                    itemLocation.PosX = posX;
                    itemLocation.PosY = posY;
                    itemLocation.PosZ = posZ;
                    newItem.position.Add(itemLocation);
                    myList.Add(newItem);