c#扩展方法奇思妙用高级篇八:Type类扩展
2010-09-30 21:06:23 来源:WEB开发网Type 类提供了大量的属性和方法,但在一些基础性开发工作中,Type类功能还有些欠缺,尤其上在处理泛型类型时,如可空类型和泛型集合类型。下面的类就针对这些地方进行扩展。
1 public static class TypeHelper
2 {
3 public static bool IsNullableType(this Type type)
4 {
5 return (((type != null) && type.IsGenericType) &&
6 (type.GetGenericTypeDefinition() == typeof(Nullable<>)));
7 }
8
9 public static Type GetNonNullableType(this Type type)
10 {
11 if (IsNullableType(type))
12 {
13 return type.GetGenericArguments()[0];
14 }
15 return type;
16 }
17
18 public static bool IsEnumerableType(this Type enumerableType)
19 {
20 return (FindGenericType(typeof(IEnumerable<>), enumerableType) != null);
21 }
22
23 public static Type GetElementType(this Type enumerableType)
24 {
25 Type type = FindGenericType(typeof(IEnumerable<>), enumerableType);
26 if (type != null)
27 {
28 return type.GetGenericArguments()[0];
29 }
30 return enumerableType;
31 }
32
33 public static bool IsKindOfGeneric(this Type type, Type definition)
34 {
35 return (FindGenericType(definition, type) != null);
36 }
37
38 public static Type FindGenericType(this Type definition, Type type)
39 {
40 while ((type != null) && (type != typeof(object)))
41 {
42 if (type.IsGenericType && (type.GetGenericTypeDefinition() == definition))
43 {
44 return type;
45 }
46 if (definition.IsInterface)
47 {
48 foreach (Type type2 in type.GetInterfaces())
49 {
50 Type type3 = FindGenericType(definition, type2);
51 if (type3 != null)
52 {
53 return type3;
54 }
55 }
56 }
57 type = type.BaseType;
58 }
59 return null;
60 }
61 }
- ››扩展Axis2框架,支持基于JVM的脚本语言
- ››扩展WebSphere Portal V6个性化功能
- ››扩展JavaScript的时候,千万要保留其原来的所有功...
- ››扩展数据:如何为 Model 750 服务器选择 I/O 扩展...
- ››扩展 JDT 实现自动代码注释与格式化
- ››扩展 secldap 的功能以验证多个数据源
- ››扩展 JUnit4 以促进测试驱动开发
- ››扩展 JUnit 测试并行程序
- ››扩展的ToolStripEx控件
- ››扩展 Eclipse 的 Java 开发工具
- ››扩展 Eclipse 辅助和规范开发流程
- ››扩展方法 DataTable 和List 相互转换
更多精彩
赞助商链接