2011-10-19 8 views
0

車のメーカーとモデルをすべてコンソールアプリケーションに保存します。C#で階層データを保存する方法

だから私はこのようにそれらを印刷することができます:だから

 - Toyota 
     Corolla  
     Camry 
     ... 

    - Nissan 
     Altima 
     Sentra 
     ... 

、私は階層的データのいくつかの種類を必要とすると仮定します。私はクラスメイクとクラスモデルの作成について考えていました。 Makeモデルのリストを持っています。そして、私はMakesのリストを持っています。しかし、これは過度に複雑に見えます。このようなことに最適なソリューションは何ですか?

+0

のリストであり、あなたのテーブルがあります既に適切な外部キーの制約で作成されている構造体のSQLファイルにlinqを指定すると、探しているオブジェクト階層が自動的に作成されます。 – asawyer

答えて

1

「店舗」とは何を意味するかによって異なります。ディスクで?アプリの記憶に?

データベースは、この種のものを永続的に格納するのに適しています。それが過度のようだが、ディスクに保存する必要がある場合は、CSVまたはXMLファイルを使用できます。アプリに組み込みたい場合は、プログラムで作成することもできますが、リソースを埋め込んで適切な構造(詳しくは後述)に読み込むほうがよいでしょう。

あなたが何をするかによってあなたのアプリケーション/プログラムには、このデータを多くの、多くの、多くの、多くの方法で保存し表現することができます。

+1

正確:メモリ内データモデルは、アクセス方法に依存します。 –

0

もっとも単純なメモリ内の記憶装置は、Dictionary<string, List<string>>です(これは、モデルからモデルのリストへのマッピングで埋められます)。 。与えられたモデルがどのようなものであるかを知りたいなら、これはあまり便利なことではないので、構造体にセトリングする前に一般的な使用パターンを理解することが重要です。

データベースでこれを保存したい場合、あなたはおそらく、スキーマを考える必要があるだろう。このような何か:

Make (MakeName, 
     PRIMARY KEY MakeName) 

Model (MakeName, 
     ModelName, 
     FOREIGN KEY MakeName REFERENCES Make(MakeName), 
     PRIMARY KEY (MakeName, ModelName)) 
0

は本当にするものに依存したモデルは、アプリケーションに意味、もし彼らは、あなたが作るだろうdictionary<string,list<string>>のように辞書のキーをリストの辞書を使用することができ、単なる文字列で、その値を使用すると、SQL Serverのバックエンドを使用している場合、モデル

0
class CarModel { 
    public CarModel(string name){ 
     CarModelName = name; 
     CarSubModels = new IList<CarModel>(); 
    } 

    public string CarModelName {get;set;} 
    public IList<CarModel> CarSubModels {get;private set;} 
    public void AddSubModel(CarModel car){ 
     if (car == null) 
      throw new ArgumentNullException("car"); 
     if (!CarSubModels.Contains(car)) 
      CarSubModels.Add(car); 
    } 
    public void RemoveSubModel(CarModel car){ 
     if (car == null) 
      throw new ArgumentNullException("car"); 
     if (CarSubModels.Contains(car)) 
      CarSubModels.Remove(car); 
    } 

    public void Print(int level=0){ 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < level; i++) 
      sb.Append(' '); 
     sb.Append(CarModelName); 
     string line = sb.ToString(); 
     Console.Writeline(line); 
     foreach (CarModel car in CarSubModels) 
      car.Print(level+1);    
    } 

} 
関連する問題