【问题标题】:Access object property in array访问数组中的对象属性
【发布时间】:2015-05-20 19:41:12
【问题描述】:
class Program{

    static void Main(string[] args){

        object[] array = new object[1];

        CreateItem item = new CreateItem();
        item.name = "Necklace";
        item.value = 5;
        array[0] = item;

        Console.WriteLine(array[0].name); //This part of the code doesn't work. 
                                          //It can't find the property name. 
        Console.ReadLine();
    }
}

public class CreateItem {
    public string name;
    public int value;
}

你好!首先我想说我对对象不是很熟悉,所以请原谅您在代码中看到的任何错误(尽管可以随时纠正它们,但这将是一个很好的学习方式)。

我一直在使用 C# 制作一个小游戏,但遇到了一个问题:当我将对象属性放入数组时,我无法访问它们。有谁知道我应该使用哪些代码来访问我在数组中的对象属性?

感谢阅读,再次原谅我犯的任何愚蠢错误,我对使用对象还很陌生。

【问题讨论】:

  • 你为什么使用object而不是强类型类?
  • 使用CreateItem 代替您的array 对象

标签: c# arrays object


【解决方案1】:

如果您有兴趣使用的强类型(并且您已经知道该类型),则不应使用对象数组。

CreateItem[] array = new CreateItem[1];

CreateItem item = new CreateItem();
item.name = "Necklace";
item.value = 5;
array[0] = item;

Console.WriteLine(array[0].name);

现在将按预期输出项链。

【讨论】:

  • 感谢您的精彩回答!也让我意识到关于对象还有多少需要了解。
【解决方案2】:

您可能应该考虑使用泛型和列表,这是一个非常常见且有价值的概念,泛型解决的装箱和拆箱概念也是如此。

class Program{

  static void Main(string[] args){

    List<CreateItem> list  = new List<CreateItem>();

    CreateItem item = new CreateItem();
    item.name = "Necklace";
    item.value = 5;
    list.Add( item );

    Console.WriteLine(list[0].name); //This part of the code doesn't work. 
                                      //It can't find the property name. 
    Console.ReadLine();
  }


}

【讨论】:

    【解决方案3】:

    您可以将对象转换为您的类型,即: Console.WriteLine(((CreateItem)array[0]).name);

    或(更有效)

    将您的array 定义为CreateItem[] array = new CreateItem[1];

    【讨论】:

      【解决方案4】:

      线

      object[] array = new object[1];
      

      创建一个类型为Object 的元素数组,它是.NET 中所有其他类的基类。

      当你这样做时:

      array[n] = item;
      

      发生到基本类型的隐式转换,通过array[n],您只能访问CreateItem 对象的Object 类型部分的成员(如ToString()GetType() - 它们的覆盖将被调用) .

      如果你想访问整个 CreateItem 对象,你必须将基类型的引用转换回原始类型,例如使用转换运算符:

      var name = ((CreateItem)array[0]).name;
      

      这种显式转换容易出错,有运行时开销,并且是糟糕设计的标志。当您事先知道集合的类型时,请按照其他答案的建议声明该类型的集合:

      // you can use array if you know number of items in advance and that number of elements will not change
      CreateItem[] array = new CreateItem[N];
      
      // use list if number of elements might change
      List<CreateItem> list = new List<CreateItem>();
      

      【讨论】:

        猜你喜欢
        • 2015-08-03
        • 2018-05-21
        • 2018-11-12
        • 2013-12-02
        • 2020-06-11
        • 2019-10-15
        • 2015-07-03
        • 1970-01-01
        相关资源
        最近更新 更多