2016-06-23 4 views
3

私は、多かれ少なかれ推測することによって何をコーディングしたのかが問題ではないので、これはあまり問題ではないと思います。私は明らかにジェネリック型の部分の外に出てきて、機能を確認するために残りの部分をテストしなければならなかったので、Googleで適切な用語を使用していません。C#再利用のためのより一般的な方法の作成、より良い方法はありますか?

私はこのような方法から行ってきました:これまで

private void SaveHw() 
    { 
     XmlSerializer xml = new XmlSerializer(typeof(List<Hardware>)); 
     try 
     { 
      using (StreamWriter sw = new StreamWriter(fileHw)) 
      { 
       xml.Serialize(sw, lstHw); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Failed to update local hardware XML.\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

private void SaveList<T>(List<T> lst, string file) 
    { 
     XmlSerializer xml = new XmlSerializer(typeof(List<T>)); 
     try 
     { 
      using (StreamWriter sw = new StreamWriter(file)) 
      { 
       xml.Serialize(sw, lst); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Failed to update local hardware XML.\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

この

 private List<T> LoadList<T>(List<T> lst, string file) 
    { 
     // don't bother if the file does not exist. 
     if (File.Exists(file)) 
     { 
      // straight forward 
      XmlSerializer xml = new XmlSerializer(typeof(List<T>)); 
      try 
      { 
       using (StreamReader sr = new StreamReader(file)) 
       { 
        return (List<T>)xml.Deserialize(sr); 
       } 
      } 
      catch 
      { 
       MessageBox.Show("Failed to load local hardware XML.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 

     return new List<T>(); 
    } 

そして、他のわずかな一般的なバリエーション私が知っているデータの一部を操作します使用されるリストのいずれかに存在します。

私の質問は、より良い方法がありますか?これらは大きなカスタムなものではないので、リスト内の構造体です。このデータは最終的にはdbであるはずですので、クラスを使用したくありませんでした。私はクラスをより拡張させるために追加します

+3

への変更を必要としない追加されます'を' IEnumerable 'と置き換えて、コレクションクラスを使用できるようにします(配列、ハッシュセットなど) – Neil

+1

より良い方法はどういう意味ですか?あなたが探している改良は何ですか? –

+0

遅刻して申し訳ありませんが、私はスタックが私にメールを送るだろうと考えました。私は、現在のプロジェクトの将来の使用や拡張のために、より一般的にするために改善するものを探しています。 – MattyMatt

答えて

3

唯一のものは、負荷への入力としてデータ・ロード・インタフェースを使用して、入力負荷\省のより一般的な方法です\機能

private IEnumerable<T> LoadData<T>(IEnumerable<T> list, IDataLoader loader) 
{ 
    ... 
} 

interface IDataLoader 
{ 
     StreamReader Load(...); 
     StreamWriter Save(...); 
} 

とAAを保存将来的にはファイル入力

class FileDataLoader : IDataLoader 
{ 
    ... 
} 

のためのより多くの同時クラスこの方法であれば例えばDBは、それが私が `一覧 に代わるloaddataの

+0

あなたはリンクを結んでいますので、私はこれについてもっと読むことができますか?私は初心者です(明らかに)、私はこれを前にしていません。 – MattyMatt

+0

この手法は、Inversion of Controlと呼ばれ、この具体例は直接依存性注入です。 http://joelabrahamsson.com/inversion-of-control-an-introduction-with-examples-in-net/ –

+0

ありがとう、良い読書。プロトタイプが機能していれば – MattyMatt

関連する問題