2011-09-10 7 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

John, _myModel은 내 viewmodel의 인터페이스입니다. 폴, 도와 줘서 고마워. 두 번째 옵션은 제가 찾고있는 것입니다. 그것을 시도하고 다시 당신에게 돌아갈 것이다. – user938455

+0

Paul, 두 번째 옵션으로 확인했습니다. 다시 한 번 감사드립니다! – user938455

+0

문제 없습니다. 원하는 경우 답변으로 표시해주세요. –

관련 문제