C# 给定一个我碰巧知道是System.RuntimeType的对象,如何获取类型化对象?

C# 给定一个我碰巧知道是System.RuntimeType的对象,如何获取类型化对象?,c#,reflection,system.reflection,C#,Reflection,System.reflection,我做了一些可怕的反省:( 我得到了一个FieldInfo对象,并在其上调用了GetValue() 我得到一个对象 在VisualStudio中检查这个对象,我发现它是一个“原型”,并且GetType()返回System.RuntimeType 在即时窗口中,我可以将我的对象强制转换为System.RuntimeType,然后我发现一个AsType()方法,该方法返回我真正的类型化对象 不幸的是,当我尝试在代码中编写这个时,我被告知System.RuntimeType是一个内部类型,因此我不能使用

我做了一些可怕的反省:(

我得到了一个
FieldInfo
对象,并在其上调用了
GetValue()

我得到一个
对象

在VisualStudio中检查这个对象,我发现它是一个“原型”,并且
GetType()
返回
System.RuntimeType

在即时窗口中,我可以将我的
对象强制转换为System.RuntimeType
,然后我发现一个
AsType()
方法,该方法返回我真正的类型化对象

不幸的是,当我尝试在代码中编写这个时,我被告知
System.RuntimeType
是一个内部类型,因此我不能使用它:(

如何从该对象中获取类型化对象?
完整代码:

KernelBase baseKernel = (KernelBase)ninjectKernel;
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
FieldInfo field = typeof(KernelBase).GetField("bindings", flags);

Multimap<Type, IBinding> allBindingsPerTypeMap = (Multimap<Type, IBinding>)field.GetValue(baseKernel);

var aBinding = allInterfaceTypesWithAllBindings.First(pair => pair.InterfaceType.Name.Contains("FilePath")).Binding;
var aBindingTarget = aBinding .BindingConfiguration.ProviderCallback.Target;

var prototype = aBindingTarget.GetType().GetField("prototype").GetValue(aBindingTarget);

// prototype is an object, which I'd like to turn into a real type.
var runtimeType = prototype.GetType(); // this returns System.RuntimeType
KernelBase baseKernel=(KernelBase)ninjectKernel;
BindingFlags=BindingFlags.Instance | BindingFlags.NonPublic;
FieldInfo field=typeof(KernelBase).GetField(“绑定”,标志);
Multimap allBindingsPerTypeMap=(Multimap)field.GetValue(baseKernel);
var aBinding=allinterfacetypeswithalbindings.First(pair=>pair.InterfaceType.Name.Contains(“FilePath”)).Binding;
var aBindingTarget=aBinding.BindingConfiguration.ProviderCallback.Target;
var prototype=aBindingTarget.GetType().GetField(“prototype”).GetValue(aBindingTarget);
//原型是一个对象,我想把它变成一个真实的类型。
var runtimeType=prototype.GetType();//返回System.runtimeType

请注意,我真的不知道对象的类型是什么——我所反映的东西本身就是一个反映……我试图从我的DI框架中提取绑定信息

根本问题的解决方案很有用,但我确实想知道如何与这个
System.RuntimeType
对象交互


更新: Evk提出了一个“moah reflection!”解决方案,这确实有效。(见评论)


如果有一种非反射方法,我很想知道它?

我倾向于认为,如果你在兔子洞这么深的地方(或者,我想,通过观察镜),你应该放弃任何从静态类型系统获益的伪装,只需利用动态运行时(假设你在.NET 4或更高版本上)


查看代码整洁程度的示例(以及一个方便的“AsDynamic”扩展方法,以简化此操作)。

您在另一块反射上使用反射,然后说“我不能使用某些类型,因为它是内部的”。如果没有其他帮助-您可以再次使用反射。哦!显然!
prototype.GetType().GetMethod(“AsType”)。Invoke(prototype,null)
确实有效。@Evk如果您想获得积分,请随意将其作为答案发布