确定对象是否是任何谓词<T>

Jay*_*Jay 8 .net c# reflection delegates types

我有一个IList<Delegate>包含一些Func<bool>s和一些Predicate<T>s,其中T有所不同.我后来需要弄清楚这些项目中Predicate<T>的哪些是s,但是不想关闭Delegate以后在列表中添加其他类型的大门,所以我不想通过识别对象来做到这一点!(current_delegate is Func<bool>).

下面的最高抽象Predicate<T>MulticastDelegate,这似乎无益(需要非泛型Predicate类型Predicate<T>),并且鉴于Delegate列表中可能存在的其他通用s,识别泛型参数的存在也是无用的.

我认为唯一的另一件事是检查NameType.对我来说,字符串比较是近乎嗅觉,但也许这是最好的和/或唯一的方式 - 你告诉我.

什么是在不知道类型的情况下明确确定a object是什么的最佳方法?Predicate<T>T

SLa*_*aks 8

像这样:

obj.GetType().GetGenericTypeDefinition() == typeof(Predicate<>)
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是要准备好捕获将为非泛型委托类型抛出的`InvalidOperationException` - 听起来它们可能是未来的可能性.为避免麻烦,请在调用此方法之前检查`Type.IsGenericType`. (5认同)