gpt4 book ai didi

c# - 将对象转换为已知(但未知)类型

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:24 26 4
gpt4 key购买 nike

希望在运行时将对象转换为已知类型。我有一个类(为方便起见称它为 Item),它是 Box 的基类。 Box 有它自己的属性以及 Item 的属性(很明显)。

基本上,我使用 CreateInstance 方法创建了一个 Box 实例,这创建了一个对象类型的对象,但真正的类型(如执行“typeof”时所见)是 Box 类型。我需要将此对象转换回 Box 而无需对任何 switch/if 等进行硬编码。我必须测试它的代码如下,我的想法已经用完了。

//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 对象。您必须转换:

if (obj is Item)
BaseList.Add((Item)obj);

或者:

if (typeof(Item).IsAssignableFrom(t))
BaseList.Add((Item)obj);

关于c# - 将对象转换为已知(但未知)类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8344676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com