English 中文(简体)
朝下阶级的种姓扔 throw英瓦利德CastException
原标题:Casting to base class throws InvalidCastException

我的集会中有以下种类:

“InheritanceTree”/

我还有一份XML文件,使用<代码>DeviceInfoprovider基类提供人。 简略版本就是这样:

<DeviceInfoProvider Type="SbRioI2CProvider" Assembly="assembly.dll" >
</DeviceInfoProvider>
<DeviceInfoProvider Type="GenericProvider" Assembly="assembly.dll" >
</DeviceInfoProvider>

当时,我把XML的田地描绘成我的变量:

assembly.dll  ⇒ assemblyPath
Type          ⇒ typeName

在阅读XML之后,使用以下代码来介绍我的类型:

var assembly = Assembly.LoadFrom(assemblyPath);

var type = (from t in assembly.GetTypes()
            where t.IsPublic && t.Name == typeName
            select t).FirstOrDefault();

if (type != null)
{
    instance = type.GetConstructor(Type.EmptyTypes).Invoke(null);
}

按照预期,这能适当地产生我的物体。

问题在于,我试图作为基类物体进行审判:

using (var provider = instance as DeviceInfoProvider)
{
    // provider is null!
}

<代码>instance的操作时间类型是预期的衍生类别,但我无法成功地将其归入其基类。

我失踪了什么?

最佳回答

您的问题可能是,你正在从集会的类型中制造出事例(基因提供者、SbRioI2CProvider)。 dll in the LoadFrom context. 然后,你试图以名字在集会上投下某种(DeviceInfoProvider)。 这含蓄地使用了洛德语。 同一组装但在不同情况下装货的类型在操作时间上被视为不同类型,因此投射失败,而你则无效。 本《条对具有约束力的集会环境作了一些补充解释。

为了取得成功,您需要获得<代码>。 大会,在LoadFrom环境中装入Load。 这样做有两种办法。 一种办法是将大会纳入全球艾滋病理事会。 另一项措施是取消集会。 d 离开申请数据库,无法通过查询找到。 然后使用上诉人。 页: 1

问题回答

援引某一反映型的构造者,就不构成其中的一个实例。

创建反映类型的例子,电话Activator.CreateInstance

它希望:

if (type != null) {
    instance = Activator.CreateInstance(type)
}

这将使<代码>instance成为>object,但现在,你可以将其投向你们想要的一切。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签