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

时间:2011-12-23 01:10:44

标签: c# reflection

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

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

4 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

您可以查找SortedList派生的IDictionary,ICollection等接口,而不是查找SortedList作为类型。我在我的博客上提供了一个有趣的读物,它给出了一个反映界面的例子:

Reflect Interface from Unknown Assembly in C#

HTH(来自你以南的HR ;-))