2011-09-10 68 views
0

我在Silverlight 4 MVVM項目中擁有以下內容。 我在我的視圖模型中有幾個方法,例如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

John,_myModel是我的viewmodel的一個接口。保羅,謝謝你的幫助。第二種選擇更多的是我正在尋找的東西。將試一試並回復你。 – user938455

+0

保羅,剛剛確認你的第二個選擇做到了。再次感謝 ! – user938455

+0

沒問題。如果你願意,隨意標記爲答案。 –