下面这段IL用reflector反编译出错。出来一个try catch
when (?) ,不知什么原因。
IL代码
.method private static !!T Create__Instance__<([System.Windows.Forms]System.Windows.Forms.Form) .ctor T>(!!T Instance) cil managed
{
.custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor()
.maxstack 4
.locals init (
[0] !!T local,
[1] string str,
[2] class [mscorlib]System.Reflection.TargetInvocationException exception,
[3] string[] strArray)
L_0000: ldarg.0
L_0001: box !!T
L_0006: brfalse.s L_001a
L_0008: ldarga.s Instance
L_000a: constrained !!T
L_0010: callvirt instance bool [System.Windows.Forms]System.Windows.Forms.Control::get_IsDisposed()
L_0015: brfalse L_00de
L_001a: ldsfld class [mscorlib]System.Collections.Hashtable dsc60.My.MyProject/MyForms::m_FormBeingCreated
L_001f: brfalse.s L_004d
L_0021: ldsfld class [mscorlib]System.Collections.Hashtable dsc60.My.MyProject/MyForms::m_FormBeingCreated
L_0026: ldtoken !!T
L_002b: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
L_0030: callvirt instance bool [mscorlib]System.Collections.Hashtable::ContainsKey(object)
L_0035: brfalse.s L_0057
L_0037: ldstr "WinForms_RecursiveFormCreate"
L_003c: ldc.i4.0
L_003d: newarr string
L_0042: call string [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Utils::GetResourceString(string, string[])
L_0047: newobj instance void [mscorlib]System.InvalidOperationException::.ctor(string)
L_004c: throw
L_004d: newobj instance void [mscorlib]System.Collections.Hashtable::.ctor()
L_0052: stsfld class [mscorlib]System.Collections.Hashtable dsc60.My.MyProject/MyForms::m_FormBeingCreated
L_0057: ldsfld class [mscorlib]System.Collections.Hashtable dsc60.My.MyProject/MyForms::m_FormBeingCreated
L_005c: ldtoken !!T
L_0061: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
L_0066: ldnull
L_0067: callvirt instance void [mscorlib]System.Collections.Hashtable::Add(object, object)
L_006c: call !!0 [mscorlib]System.Activator::CreateInstance<!!T>()
L_0071: stloc.0
L_0072: leave.s L_00e0
L_0074: isinst [mscorlib]System.Reflection.TargetInvocationException
L_0079: dup
L_007a: brtrue.s L_0080
L_007c: pop
L_007d: ldc.i4.0
L_007e: br.s L_0096
L_0080: dup
L_0081: stloc.2
L_0082: call void [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.ProjectData::SetProjectError(class [mscorlib]System.Exception)
L_0087: ldloc.2
L_0088: callvirt instance class [mscorlib]System.Exception [mscorlib]System.Exception::get_InnerException()
L_008d: ldnull
L_008e: ceq
L_0090: ldc.i4.0
L_0091: ceq
L_0093: ldc.i4.0
L_0094: cgt.un
L_0096: endfilter
L_0098: pop
L_0099: ldstr "WinForms_SeeInnerException"
L_009e: ldc.i4.1
L_009f: newarr string
L_00a4: stloc.3
L_00a5: ldloc.3
L_00a6: ldc.i4.0
L_00a7: ldloc.2
L_00a8: callvirt instance class [mscorlib]System.Exception [mscorlib]System.Exception::get_InnerException()
L_00ad: callvirt instance string [mscorlib]System.Exception::get_Message()
L_00b2: stelem.ref
L_00b3: ldloc.3
L_00b4: call string [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Utils::GetResourceString(string, string[])
L_00b9: stloc.1
L_00ba: ldloc.1
L_00bb: ldloc.2
L_00bc: callvirt instance class [mscorlib]System.Exception [mscorlib]System.Exception::get_InnerException()
L_00c1: newobj instance void [mscorlib]System.InvalidOperationException::.ctor(string, class [mscorlib]System.Exception)
L_00c6: throw
L_00c7: ldsfld class [mscorlib]System.Collections.Hashtable dsc60.My.MyProject/MyForms::m_FormBeingCreated
L_00cc: ldtoken !!T
L_00d1: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
L_00d6: callvirt instance void [mscorlib]System.Collections.Hashtable::Remove(object)
L_00db: endfinally
L_00dc: br.s L_00e0
L_00de: ldarg.0
L_00df: ret
L_00e0: ldloc.0
L_00e1: ret
.try L_006c to L_0074 filter L_0074 handler L_0098 to L_00c7
.try L_006c to L_00c7 finally handler L_00c7 to L_00dc
}
//C#代码
[DebuggerHidden]
private static T Create__Instance__<T>(T Instance) where T: Form, new()
{
T local;
if ((Instance != null) && !Instance.IsDisposed)
{
return Instance;
}
if (m_FormBeingCreated != null)
{
if (m_FormBeingCreated.ContainsKey(typeof(T)))
{
throw new InvalidOperationException(Utils.GetResourceString("WinForms_RecursiveFormCreate", new string[0]));
}
}
else
{
m_FormBeingCreated = new Hashtable();
}
m_FormBeingCreated.Add(typeof(T), null);
try
{
local = Activator.CreateInstance<T>();
}
catch
when (?) {
TargetInvocationException exception;
throw new InvalidOperationException(Utils.GetResourceString("WinForms_SeeInnerException", new string[] { exception.InnerException.Message }), exception.InnerException);
}
finally
{
m_FormBeingCreated.Remove(typeof(T));
}
return local;
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!