I have two parent classes: Item
and ItemData
. From the first, I make items such as WeaponItem
and from the second I make corresponding data like WeaponData
.
Each item type takes the same type of data in its constructor (example: when creating WeaponItem
it needs WeaponData
).
我有以下方法:
public static T CreateNewItem<T, DT>(ItemData data) where T : Item where DT : ItemData
{
if (data == null) return null;
if (data is DT dt)
{
//determine type of T
Type itemType = typeof(T);
if (itemType = typeof(WeaponItem))
{
//make a new weapon item...
WeaponItem new_weapon = new WeaponItem(dt); //error!
return new_weapon;
}
if (itemType = typeof(ArmorItem))
{
//make a new armor item...
}
//etc...
}
return null;
}
我这样称呼它:
CreateNewItem<WeaponItem, WeaponData>(data);
注:data
是ItemData
型或某些继承型(如WeaponData
).
这种方法需要两种类型:一种用于Item
,另一种用于ItemData
.我有几件物品(武器、盔甲等)我根据我给出的类型创建项目.我还想判断我使用的数据:data is DT dt
从我通过的数据中获得WeaponData
,或者null
如果转换失败.
当我try 做WeaponItem new_weapon = new WeaponItem(dt);
次时,我得到以下错误:
参数1:无法从'DT'转换为'WeaponData'[Assembly CSharp]CSharp(CS1503)
我试着把dt
投到WeaponData
,就像这样:WeaponItem new_weapon = new WeaponItem((WeaponData)dt);
,但我得到了一个类似的错误
无法将类型"DT"转换为"WeaponData"[Assembly CSharp]CSharp(CS0030)
类似地,使用data
代替dt
会产生错误.
不必每次判断型号就可以解决这个问题吗?