2010-12-31 9 views
2

最初に私はこれを読んでみんなに幸せな新年をお祈りします:)提案されたデータとそのコンテナのクラス構造は?

私は自分のアプリケーションにインポートするいくつかのデータ用のコンテナを作る方法に問題があります。これを非常にうまく説明する方法については私の英語は本当に良いことではありませんので、間違いを犯して助けてくれることを願っています。 GUID、itemid、name、owner(オプション、nullでもかまいません)、zoneid、titleid、subid、見出し、x、y、z、タイプA、タイプB、タイプC

上記のフィールドから、指定したアイテムが移動したすべてのコードのウェイポイントリストを保存する必要がありますが、各ウェイポイントの新しいリストがあります。

ウェイポイントリストから最初のエントリは私の最初のアイテムの開始位置になります(私が別のリストを持っていることに気づいた場合は、それが良いかどうかはわかりません)。アイテムにはウェイポイントリストがありますが、すべてのアイテムが最初の位置にあります。

だから私は、このデータを保存するために来た最初のアイデアは、自分のリストを持つ2つのインナークラスを持つクラスを持つリストだった。だからここ

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

私は新しいウェイポイントを追加する方法の例です

:私はので、私は再び同じGUIDを登録しません上記のitemExistを利用する新しいアイテムを登録する次に、リストに

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

が存在する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:ご不明な点がありましたら、私に知らせてください。私はそれを更新します。

UPDATE:私が現在持っているものを反映するために上記を変更しました。他の誰かがまだ私が聞きたいアドバイスがある場合は変更してください。

答えて

1

いくつかの注意事項(シャンペーンの2杯の後に...):

  • あなたは、データ構造とその用途のための任意の要件を述べるません。あなたのデザインはかなり合理的です。
  • FirstOrDefault()メソッドを使用して、アイテムの存在(戻り値!= null)を確認し、1回の操作でリストから取得することができます。
  • あなたのコードには明らかなバグがあります:新しいウェイポイントが追加される前にはnextWaypoint != nullのチェックがなく、存在する必要はありません。同様に、リストにはヌル値が含まれないので、lastWaypoint != nullチェックは必要ありません。
  • 必須プロパティの値を受け入れるクラスにコンストラクタを導入することをお勧めします。
  • ItemListを識別するGUIDと整数IDの両方を持つ明確なポイントはありません。検索条件はちょうど過大に指定されています。
  • 一般的に使用されるコーディング標準では、プロパティ名は大文字(posXPosXなど)で始まることが記述されています。
  • waypointpositionのリストもプロパティである必要があります。 getterのみを持ち、readonlyフィールドでバックアップされています。

P.S.

+0

'FirstOrDefault()メソッドを使用すると、アイテムの存在(つまり、戻り値!= null)をチェックし、取得することができますしかし、これは私のためには使えないだろう。なぜなら、中間地点では、最初は必要ないが、最後は、アイテムのために検索しなければならないから、知っているのは神だからである。 「見た目のバグ」実際に私はここにそれを掲示するためにそれを書き換えていました、そして、私はプロセスの重要な部分を私の悪い部分を飛ばすかもしれません。コンストラクタを導入することをお勧めします。私はそれを持っていますが、疑問の本当に必要な情報だけを使って投稿のサイズを縮小しようとしていました。 – Prix

+0

それはほとんどheheです;)ありがとう、はいプロパティもタイプ+飲み物だった... hehe私は私のコードからその一部をコピーして貼り付けましたが、ここに投稿の過程でいくつかのものを書き換え、それを忘れてしまったかもしれません。 – Prix

+0

が 'FirstOrDefault'について書いてありました。それは私に' LastOrDefault'をもたらして以来の大きなヒントでした – Prix

関連する問題