Нет прямого пути.Вы можете попытаться отразить или сравнить имена типов в некрасивом операторе 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 );
Тем не менее, я все еще люблю перегрузки лучше.:)