c#高级编程之Type类扩展TypeHelper(2)
TypeHelper 是我从一个类库中提取的,它原本是一个 internal static class,内部的方法同样 internal static 。我仅仅是把 internal 改成了 public ,并在每个方法的第一个参数前加了个 this,最后给类中的方法按从简到难的顺序进行了排序。
也许是因为 TypeHelper 是一个内部类,并有强烈的应用语境,TypeHelper 并没有采用契约式编程的方式,甚至在命名上也做了一些省略: 如 IsEnumerableType、GetElementType 两个方法是实际是用来处理泛型集合类型的,但在方法名和参数名上并没有“Generic”的字眼。(如果传入非泛型类型或其它类型,将会产生难以预料的结果或异常。)
像这样简单将内部静态类 TypeHelper 中的静态方法公开为扩展方法是存在问题的,所以在应用之前,还得再做些工作。改进成为契约式编程的方式并不难,难的是给扩展方法起一个清晰明了简单易懂的名字,否则就不要扩展了。IsEnumerableType、GetElementType 应该体现出是对泛型集合进行操作,简单加上Generic字样后名字好长,也不好理解。
另外在使用时,我发现两处“奇怪”的地方,如下图:
调试至此处,type1为空,type2则是一个少见的奇怪类型。