2011-09-10 18 views
0

Silverlight 4 MVVMプロジェクトでは、次のものがあります。 私は、例えば、先生のコレクションから教師を削除することができる私のviewmodelに、DeleteTeacher(p)、DeleteRecordOfEntity2(p)などのいくつかのメソッドを持っています。C#でのジェネリックの使用

私はそうのようなさまざまなエンティティタイプ渡すことによって、DeleteMyDataメソッドを呼び出すことができるようにしたい: DeleteMyData < 学生を>(); DeleteMyData < 教師>();

どのように動的にthis.SelectedTeacherとthis._myModel.DeleteTeacher(p)を次のメソッドで変更して、異なるエンティティと異なる選択オブジェクトを処理できますか?

private void DeleteMyData<T>() where T : Entity 
     {     this.ModalDialogWorker.ShowDialog<T>(
       this.ModalDialog, this.CustomControl, this.SelectedTeacher, p => 
       { 
        if (this.ModalDialog.DialogResult.HasValue && 
         this.ModalDialog.DialogResult.Value) 
        { 

         this._myModel.DeleteTeacher(p);      


         this._myModel.SaveChangesAsync(); 
        } 
       }); 

     } 
+0

'_myModel'のタイプは何ですか? –

答えて

2

簡単な方法はありません。醜いswitch文の型名を比較したり比較したりすることができます。

しかし、いろいろなオブジェクトのオーバーロードを作成するだけではどうですか?

private void DeleteMyData(Teacher teacher) { /* Delete Teacher code */ } 

private void DeleteMyData(Student student) { /* Delete Student code */ } 

そして、適切な場合には、それを呼び出す:

private void DeleteMyData(this.SelectedTeacher); 

編集:をもう一度あなたの例を見た後、あなたはまた、削除を処理する委譲に渡すことができます。あなたの署名への変更:

private void DeleteMyData<T>(T value, Action<T> deleteAction) 
{ 
    this.ModalDialogWorker.ShowDialog<T>(
     this.ModalDialog, this.CustomControl, value, p => 
     { 
      if (this.ModalDialog.DialogResult.HasValue && 
       this.ModalDialog.DialogResult.Value) 
      { 
       deleteAction(p); 
       this._myModel.SaveChangesAsync(); 
      } 
     }); 
} 

そしてあなたが好きそれを使用することができます。

DeleteMyData(this.SelectedTeacher, this._myModel.DeleteTeacher); 

DeleteMyData(this.SelectedStudent, this._myModel.DeleteStudent); 

私はまだ過負荷がより良いように、と述べました。 :)

+0

ジョン、_myModelは私のviewmodelのためのインターフェイスです。ポール、助けてくれてありがとう。第二の選択肢は、私が探していたものです。試してみるとあなたに戻ってきます。 – user938455

+0

Paul、ちょうどあなたの2番目のオプションがそれをしたことを確認しました。再度、感謝します ! – user938455

+0

問題ありません。あなたが望むならば、これを答えとしてマークしてください。 –

関連する問題