Type.GetType()陷阱
在开发的过程中,偶尔会使用Type.GetType()动态获取一个类型。Type.GetType()方法有很多重载,其应用场景有所不同。笔者在项目中用到了GetType(string typeName, bool throwOnError)此方法,其中第一个参数要求传入一个Class的完全限定名,如:FF.Persistence.Driver.SQLite, FF.Persistence,第二个参数表示调用此方法异常是否抛出。
关于typeName的说明如下:
1)字符串的首尾不允许有空格,逗号前不允许有空格(笔者在项目中应该在逗号前多余了一个空格导致抛出无法找到类型的异常)
2)完全限定名可以包含逗号后面的namespace,当然也可不包含
关于跨进程的反射同样有两点要注意:
1)typeof是支持强类型的,如:var t = typeof(FF.Persistence.Driver.SQLite) 前提是项目必须引用FF.Persistence程序集
2)使用Type.GetType来进行反射,要明白Type.GetType是非强类型,如果参数typeName表示的目标类型不在当前程序集中,那么会返回null。解决办法是:
var asmb = Assembly.LoadFrom("FF.Persistence.dll") ;
var supType = asmb.GetType("FF.Persistence.Driver.SQLite") ;
以上都是些小细节,如果留心会少走很多弯路。
作者:Olar Tan
出处:http://www.cnblogs.com/olartan
♪:没有做不到的 只有偷懒而错过的 ♪