我试图让ldtoken
IL 方法在泛型类中加载泛型方法的泛型实例化(例如,List.ConvertAll<TOutput>
):
ldtoken method instance
class [mscorlib]System.Collections.Generic.List`1<!!0>
[mscorlib]System.Collections.Generic.List`1::ConvertAll<string>(
class [mscorlib]System.Converter`2<!0,!!0>)
这会导致异常:
未处理的异常:System.TypeLoadException:无法从程序集“TestAssembly,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”加载类型“System.Collections.Generic.List`1”。
它正在我的测试程序集中寻找System.Collections.Generic.List
,即使它已在mscorlib
!中明确声明。
但是,加载未实例化的方法令牌有效:
ldtoken method instance
class [mscorlib]System.Collections.Generic.List`1<!!0>
[mscorlib]System.Collections.Generic.List`1::ConvertAll<[1]>(
class [mscorlib]System.Converter`2<!0,!!0>)
非泛型类中的泛型方法有效:
ldtoken method void [mscorlib]System.Array::Sort<object>(!!0[])
ldtoken method void [mscorlib]System.Array::Sort<[1]>(!!0[])
这是怎么回事?这是 .NET 中的错误吗?(我已经在 v2 和 v4 CLR 上复制了它)