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

本文关键字:类型参数 泛型类型 对象 是否 检查 | 更新日期: 2023-09-27 18:17:49

假设您有一个带有ItemsSource-Property (DataGrid.ItemsSource)的网格。此属性是在运行时期间设置的。一个可能的对象可以是:

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();
}

有人知道怎么做吗?

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

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

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

如果您想知道类型是否继承自泛型InstantFeedbackCollectionViewModel,请参阅检查类是否派生自泛型类