c# - 确定对象是否是任何 Predicate<T>

标签 c# .net 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 .对我来说,字符串比较几乎是一种气味,但也许这是最好的和/或唯一的方法——你告诉我。

确定 object 的最佳方法是什么?是任何 Predicate<T>不知道 T 的类型?

最佳答案

像这样:

obj.GetType().GetGenericTypeDefinition() == typeof(Predicate<>)

关于c# - 确定对象是否是任何 Predicate<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2320149/

相关文章:

c# - Web 客户端 DownloadFileCompleted 获取文件名

c# - 将 System::String^(C# 字符串)转换为 C++ std::string

c# - 如何使用 C# 中的 SDK 库从 Dynamics Entity 中删除值

c# - Catch(Exception) 和 Catch(Exception ex) 的区别

.net - GAC 似乎包含两个具有相同名称、版本和公钥 token 的程序集

c# - linq c# 中的动态多个 where 子句

c# - 垃圾收集器在 foreach 循环中太慢?

c# - 静态类和命名空间有什么区别? (在 C# 中)

java - 如何从 List<T> 中获取 Class<T>

c# - 是否有一种设计模式可以避免这种重复或反射(reflection)?