WEB开发网
开发学院软件开发C语言 c#扩展方法奇思妙用高级篇八:Type类扩展 阅读

c#扩展方法奇思妙用高级篇八:Type类扩展

 2010-09-30 21:06:23 来源:WEB开发网   
核心提示:Type 类提供了大量的属性和方法,但在一些基础性开发工作中,c#扩展方法奇思妙用高级篇八:Type类扩展,Type类功能还有些欠缺,尤其上在处理泛型类型时,如可空类型和泛型集合类型,下面的类就针对这些地方进行扩展

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     }

1 2 3  下一页

Tags:扩展 方法 奇思

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接