检查对象是否是具有多个类型参数的泛型类型

时间:2015-10-15 15:45:06

标签: c# .net class generics typeof

假设您有一个带有ItemsSource-Property(DataGrid.ItemsSource)的Grid。此属性已在运行时设置。可能的对象如下:

public partial class InstantFeedbackCollectionViewModel<TEntity, TPrimaryKey, TUnitOfWork> 
   : InstantFeedbackCollectionViewModelBase<TEntity, TEntity, TPrimaryKey, TUnitOfWork>

稍后在运行时我希望捕获一个事件,并想检查网格的ItemsSource是否属于上述类型。

通常我会这样做:

if (typeof(datagrid.ItemsSource) is InstantFeedbackCollectionViewModel) then ...

但是我怎么能用这个泛型类做到这一点?

更新:

在第二步中,我想在InstantFeedbackCollectionViewModel中执行一个方法。这样的事情:

if (datagrid.ItemsSource.GetType().GetGenericTypeDefinition() == typeof(InstantFeedbackCollectionViewModel<,,>) {
var instFeedbackCollectionViewModel = grid.ItemsSource;
instFeedbackCollectionViewModel.ExecuteMyMethod();
}

有人知道怎么做吗?

1 个答案:

答案 0 :(得分:1)

如果您想知道该类型是否为通用InstantFeedbackCollectionViewModel,您可以使用以下代码:

bool isInstantFeedbackCollectionViewModel = 
      datagrid.ItemsSource.GetType().GetGenericTypeDefinition() ==
      typeof(InstantFeedbackCollectionViewModel<,,>);

如果您想知道该类型是否继承自通用InstantFeedbackCollectionViewModel,请参阅Check if a class is derived from a generic class