将Object强制转换为已知(但未知)类型
本文关键字:未知 类型 Object 转换 | 更新日期: 2023-09-27 18:16:27
希望在运行时将对象强制转换为已知类型。我有一个类(为方便起见叫它Item),它是Box的基类。Box有它自己的属性,也有Item的属性(很明显)。
基本上,我使用CreateInstance
方法创建了一个Box的实例,这创建了一个Object类型的对象,但真正的类型(当执行'typeof'时看到的)是Box类型。我需要在没有硬编码任何switch
/if
等的情况下将此对象转换回Box。下面是我必须测试的代码,我已经没有想法了。
//Base Class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace Test11
{
public class Item
{
public int property1 { get; set; }
public int property2 { get; set; }
public int property3 { get; set; }
public Item()
{
property1 = 1;
property2 = 2;
property3 = 3;
}
}
//Box Class - Inherits from Item
namespace Test11
{
public class Box : Item
{
public int property4 { get; set; }
public Box()
{
property4 = 4;
}
}
}
//Application Class
namespace Test11
{
class Program
{
static void Main(string[] args)
{
List<Item> BaseList = new List<Item>();
object obj = Assembly.GetExecutingAssembly().CreateInstance("Test11.Box");
Type t = Type.GetType("Test11.Box");
//The following line does not work, need to make it work :)
//BaseList.Add(obj as t);
Console.WriteLine(t.ToString());
Console.ReadLine();
}
}
}
我现在已经尝试了很多不同的方法,上面的方法是其中之一。有什么想法或帮助吗?
您的BaseList
正在等待Item
对象。你有 cast:
if (obj is Item)
BaseList.Add((Item)obj);
或:
if (typeof(Item).IsAssignableFrom(t))
BaseList.Add((Item)obj);
您正在使用动态加载的程序集吗?如果您确定它将是Box,您是否可以将Box声明为Item附近的部分类,并在动态程序集中填充它的实现细节?
不确定它是否会工作,我还没有尝试过那个特殊的问题。