我在读取我放入arraylist的项目的属性时遇到了一些问题,我无法在任何地方找到答案。
ArrayList itemsArrayList = new ArrayList();
itemsArrayList.Add(abyssalScepter);
itemsArrayList.Add(aegisOfTheLegion);
itemInBuildAbilityPower = itemsArrayList[0].abilityPower;
我需要能够读取数组中对象的属性,以便我可以在其他地方应用它们的值,但这让我无处可去。
答案 0 :(得分:5)
您需要将对象强制转换为期望的类型(并希望它真的属于这种类型)。
itemInBuildAbilityPower = ((Item)itemsArrayList[0]).abilityPower;
更好的选择(如果基础设施代码是您的)使用通用容器,例如List<T>
。
List<Item> itemsArrayList = new List<Item>
itemsArrayList.Add(abyssalScepter);
itemsArrayList.Add(aegisOfTheLegion);
itemInBuildAbilityPower = itemsArrayList[0].abilityPower;
答案 1 :(得分:1)
试
var itemInBuildAbilityPower = itemsArrayList[0].GetType().GetProperty ("abilityPower").GetGetMethod().Invoke (itemsArrayList[0], null);
答案 2 :(得分:1)
基于elder_george的回答,以下是abyssalScepter
和aegisOfTheLegion
不完全相同类型时可以执行的操作示例:
using System.Collections.Generic;
class Power { }
interface IAbilityPower { Power abilityPower { get; set; } }
class Scepter : IAbilityPower { public Power abilityPower { get; set; } }
class Aegis : IAbilityPower { public Power abilityPower { get; set; } }
class Test
{
public static void Main()
{
var abyssalScepter = new Scepter();
var aegisOfTheLegion = new Aegis();
var itemsList = new List<IAbilityPower>();
itemsList.Add(abyssalScepter);
itemsList.Add(aegisOfTheLegion);
var power = itemsList[0].abilityPower;
}
}