如何从ItemData列表提取WeaponData派生类对象并生成专属列表?
解决从List提取WeaponData实例的类型转换问题
编译器仅识别slot.ItemData为基类ItemData类型,即使它实际是派生类WeaponData的实例,也需要显式转换才能存入List<WeaponData>。以下是几种可行方案:
1. 显式强制转换
适用于你确定slot.ItemData一定是WeaponData实例的场景,转换失败会抛出InvalidCastException:
if (slot.IsFilled) { weapons.Add((WeaponData)slot.ItemData); }
2. 使用as运算符安全转换
转换失败时返回null,可配合空值判断避免运行时异常,适合不确定对象类型的场景:
if (slot.IsFilled) { WeaponData weapon = slot.ItemData as WeaponData; if (weapon != null) { weapons.Add(weapon); } }
3. LINQ批量过滤转换
如果需要从整个List<ItemData>中提取所有WeaponData实例,用OfType<T>方法一步完成过滤和转换:
// 假设原ItemData集合为itemDataList List<WeaponData> weapons = itemDataList.OfType<WeaponData>().ToList();
内容的提问来源于stack exchange,提问作者Craig Johnson
相关产品推荐
相关产品推荐

