Zuerst möchte ich allen, die dies lesen, ein frohes neues Jahr wünschen :)
Ich habe Schwierigkeiten, wie man einen Container für einige Daten, die ich in meine Anwendung importieren zu machen, und ich bin nicht sicher, wie man dies sehr gut zu erklären und mein Englisch ist nicht wirklich ein, dass gut, so ich hoffe, Sie können mit meinem Fehler zu tragen und helfen Sie mir mit einigen Leitlinien.
Derzeit importiere ich mit einem foreach die folgenden Felder aus den empfangenen Daten: guid, itemid, name, owner(optional, kann null sein), zoneid, titleid, subid, heading, x, y, z, typeA, typeB, typeC
Aus den oben genannten Feldern muss ich eine Wegpunktliste mit allen Koordinaten speichern, zu denen sich ein bestimmtes Element bewegt hat, ABER für jede Guid habe ich eine neue Liste von Wegpunkten.
Und von der Wegpunktliste ist der erste Eintrag auch meine anfängliche Element-Startposition, die meine Element-Ausgangsposition sein würde (wenn Sie bemerken, habe ich eine separate Liste für sie, die ich nicht sicher war, wäre besser oder nicht) nicht alle Elemente haben eine Wegpunktliste, aber alle Elemente haben die erste Position.
Also die erste Idee, die ich kam mit, um diese Daten zu speichern war eine Liste mit einer Klasse mit 2 inneren Klassen mit ihrer Liste:
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>();
}
Hier ist ein Beispiel, wie ich einen neuen Wegpunkt zu einer GUID hinzufügen würde, die in der Liste existiert
ItemList myItem = myList.Find(item => item.GuID == GUID);
if (myItem != null)
{
int lastDistance = 3;
ItemList.Waypoint nextWaypoint;
// Add new Coordinates to the given GUID
ItemList.Waypoint lastWaypoint = myItem.Routes.LastOrDefault();
if (lastWaypoint != null)
{
lastDistance = getDistance(posX, posY, posZ, lastWaypoint.PosX, lastWaypoint.PosY, lastWaypoint.PosZ);
if (lastDistance > 2)
{
nextWaypoint = new ItemList.Waypoint();
nextWaypoint.SubID = subID;
nextWaypoint.Zone = zone;
nextWaypoint.Heading = convertHeading(heading);
nextWaypoint.PosX = posX;
nextWaypoint.PosY = posY;
nextWaypoint.PosZ = posZ;
nextWaypoint.Rest = rest;
myItem.waypoint.Add(nextWaypoint);
}
}
}
Dann, um ein neues Element zu registrieren, würde ich die Vorteile der itemExist oben nehmen, so dass ich nicht die gleiche GUID wieder registrieren:
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);
Könnten Sie mir mit Ratschlägen helfen, wie meine Klassenstruktur und Listen aussehen sollten?
Gibt es bessere Möglichkeiten, mit den Listen zu interagieren, um den letzten Wegpunkt einer GUID zu erhalten oder zu überprüfen, ob ein Element vorhanden ist oder nicht?
Was würden Sie mir sonst noch allgemein raten?
PS: Wenn Sie Fragen haben oder ich etwas vergessen habe, lassen Sie es mich bitte wissen und ich werde es aktualisieren.
UPDATE: habe die oben genannten geändert, um zu reflektieren, was ich derzeit habe, und wenn jemand anderes noch Ratschläge hat, würde ich gerne hören.