C#将泛型类更改为子类

时间:2019-04-26 19:40:14

标签: c# generics type-conversion

我目前正在尝试使用泛型将超类更改为其子类之一,但没有成功。我是否应该再次将接口更改为类并使用超类。我不知道该怎么做。

public static Boolean AddorUpdateItem<T>(int id, String database, ref T item) where T : Item
{
    if(typeof(T) == typeof(Person)){

        if (ReturnItem(id, database) == null)
        {
            ChangeType(Item item, Person person);
            Person person = new Converter<Item, Person>(item);
            return PersonOperations.AddPerson(item);
        }
        else
        {
            return PersonOperations.UpdatePerson(id, item);
        }
    }

    return false;
}

物品类

public class Item
{

public string Name{
        get;
        set;
}

public int ID{
        get;
        set;
}

}

人员班

public class Person : Item
{

    private int reward_point;

    public String FName
    {
        get;
        set;
    }
    //More variables below.

我希望将此项目类型转换为人员类型,以便.addPerson或.updatePerson方法可以接受该类。或者换句话说,我希望addorupdate方法接受作为Item超类的子类的单个对象。然后,它将尝试确定其类型,并将该对象发送到围绕该对象设计的另一种方法。

1 个答案:

答案 0 :(得分:1)

我真的不喜欢您的方法,但是如果您已经检查了类型,就可以投射对象。

if(typeof(T) == typeof(Person))
{
     Person person = (Person) item;