如何测试反射字段的类型是否为指定类型或从指定类型继承

本文关键字:类型 是否 继承 何测试 测试 字段 反射 | 更新日期: 2023-09-27 18:18:43

我正在迭代一个类的FieldInfo。我希望能够测试给定字段是否属于某种类型。

具体问题是我想知道从SortedList派生的所有字段。所以它们不完全是SortedList,但每个都是SortedList。给定字段的FieldInfo,我如何测试这一点?

如何测试反射字段的类型是否为指定类型或从指定类型继承

您可以使用IsAssignableFrom方法执行此测试,如下所示:

var isSortedList = typeof(SortedList).IsAssignableFrom(fieldInfo.FieldType);

除了将SortedList作为类型查找之外,还可以查找SortedList派生的接口,如IDictionary、ICollection。我在我的博客上提供了一个有趣的阅读,它给出了一个接口反射的例子:

反映c#中未知程序集的接口

HTH(你南边的HR;-))

if ((fieldInfo.FieldType == typeof(SortedList)) || fieldInfo.FieldType.IsSubclassOf(typeof(SortedList))
    Console.WriteLine("Field {0} is of type {1}", fieldInfo.Name, typeof(blah.Name));

此代码未经测试,但大致是我以前使用过的。

bool canCast = (fieldInfo.FieldType == typeof(SortedList) ||
               (fieldInfo.FieldType.IsSubclassOf(typeof(SortedList)));