【问题标题】:How to read the properties of an object inside an arraylist如何读取数组列表中对象的属性
【发布时间】:2011-10-09 00:12:41
【问题描述】:

我在读取已放入数组列表的项目的属性时遇到了一些问题,我无法在任何地方找到答案。

ArrayList itemsArrayList = new ArrayList();

itemsArrayList.Add(abyssalScepter);         
itemsArrayList.Add(aegisOfTheLegion);

itemInBuildAbilityPower = itemsArrayList[0].abilityPower;

我需要能够读取数组中对象的属性,以便可以将它们的值应用到其他地方,但这让我无处可去。

【问题讨论】:

  • 什么意思,让你无处可去?请具体。你有编译错误吗?运行时错误?如果是这样,请告诉我们错误/堆栈跟踪。另外请告诉我们列表中的这些对象是什么。
  • 我会推荐 Elder_george 的答案,因为它是正确的方法,尽管 Yahia 的答案对于不同类型但包含相同属性的事物非常好。

标签: c# arrays object properties arraylist


【解决方案1】:

您需要将对象转换为预期的类型(并希望它真的是这种类型)。

itemInBuildAbilityPower = ((Item)itemsArrayList[0]).abilityPower;

使用通用容器的更好选择(如果基础架构代码是您的),例如List<T>

List<Item> itemsArrayList = new List<Item>

itemsArrayList.Add(abyssalScepter);         
itemsArrayList.Add(aegisOfTheLegion);

itemInBuildAbilityPower = itemsArrayList[0].abilityPower;

【讨论】:

  • 我不得不将其更改为List&lt;item&gt; itemsArrayList = new List&lt;item&gt;();,但它现在可以工作了,非常感谢!现在我只是无法将它们添加到列表框
  • 你使用 WinForms 还是 WPF/Silverlight?
  • WinForms。我基本上需要将数组中每个对象的属性“itemName”添加到列表框
  • 我能够解决问题,结果发现我只是语法错误。再次感谢大家的帮助!
【解决方案2】:

试试

var itemInBuildAbilityPower = itemsArrayList[0].GetType().GetProperty ("abilityPower").GetGetMethod().Invoke (itemsArrayList[0], null);

【讨论】:

  • 感谢您的快速回复!但是我收到以下错误:错误 1“System.Reflection.PropertyInfo”不包含“GetMethod”的定义,并且没有扩展方法“GetMethod”接受“System.Reflection.PropertyInfo”类型的第一个参数(您是否缺少 using 指令或程序集引用?) C:\Users\Mike\Desktop\LolBuddy\LolBuddy\LolBuddy\Form1.cs 49 99 LolBuddy
【解决方案3】:

根据 Elder_george 的回答,如果 abyssalScepteraegisOfTheLegion 不是完全相同的类型,您可以执行以下操作:

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;
        }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多