【问题标题】:c# Get object property from ArrayListc# 从 ArrayList 获取对象属性
【发布时间】:2011-04-09 19:45:07
【问题描述】:

想不通这个

我有一个类的 ArrayList:

        // Holds an image
        public class productImage
        {
            public int imageID;
            public string imageURL;
            public DateTime dateAdded;
            public string slideTitle;
            public string slideDescrip;
        }

    public ArrayList productImages = new ArrayList();

productImage newImage = new productImage();
newImage.imageID = 123;
productImages.Add(newImage);

现在我如何访问该属性?

int something = productImages[0].imageID

没用!

错误 1 ​​'object' 不包含 'slideTitle' 的定义并且没有 扩展方法'slideTitle' 接受类型的第一个参数 可以找到“对象”(你是 缺少 using 指令或 汇编参考?)

【问题讨论】:

  • 不要在 .net 2.0 及更高版本中使用数组列表。

标签: c# asp.net arraylist


【解决方案1】:

ArrayList 中的值输入到Object。您需要转换为 productImage 才能访问该属性。

int something = ((productImage)productImages[0]).imageId;

一个更好的解决方案是使用像List<T> 这样的强类型集合。您可以指定元素类型为 productImage 并完全避免强制转换。

public List<productImage> productImages = new List<productImage>();
productImage newImage = new productImage();
newImage.imageID = 123;
productImages.Add(newImage);
int something = productImages[0].imageID;  // Works

【讨论】:

    【解决方案2】:

    尝试:

     int something = ((productImage)productImages[0]).imageID;
    

    需要从类型对象中强制转换。

    【讨论】:

      【解决方案3】:

      只是为了让这段代码符合现代习语:

      public ArrayList productImages = new ArrayList();
      
      productImage newImage = new productImage();
      newImage.imageID = 123;
      productImages.Add(newImage);
      

      可以改写为:

      var productImages = new List<ProductImage> { new ProductImage { ImageID = 123 } };
      

      【讨论】:

      • 谢谢,但为了简单起见,我减少了问题中的代码,实际代码在循环中获取数据库记录
      猜你喜欢
      • 2020-03-02
      • 2014-12-24
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多