我正在努力提高应用程序的性能.我们有很多Activator.CreateInstance调用引起了一些悲伤.
我们基于一个接口(ITabDocument)实例化了很多类,在浏览后我想到了使用这段代码:
代码并不比使用我们拥有的Activator.CreateInstance代码更好(实际上稍慢).
public static Func<T> CreateInstance<T>(Type objType) where T : class, new()
{
var dynMethod = new DynamicMethod("DM$OBJ_FACTORY_" + objType.Name, objType, null, objType);
ILGenerator ilGen = dynMethod.GetILGenerator();
ilGen.Emit(OpCodes.Newobj, objType.GetConstructor(Type.EmptyTypes));
ilGen.Emit(OpCodes.Ret);
return (Func<T>)dynMethod.CreateDelegate(typeof(Func<T>));
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会这样,我所做的只是:
ITabDocument document = CreateInstance<ITabDocument>(Type.GetType("[Company].Something"));
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来创建有助于上述内容的对象?当你不确定具体的类型时,它有点难.
我正在创建自己的字典,但我无法实现TryGetValue函数.当找不到密钥时,我没有任何东西要分配给out参数,所以我保持原样.这会导致以下错误:"必须在控制离开当前方法之前将out参数'value'分配给"
所以,基本上,我需要一种方法来获取默认值(0,false或nullptr取决于类型).我的代码类似于以下内容:
class MyEmptyDictionary<K, V> : IDictionary<K, V>
{
bool IDictionary<K, V>.TryGetValue (K key, out V value)
{
return false;
}
....
}
Run Code Online (Sandbox Code Playgroud)