【问题标题】:How to read an array of objects如何读取对象数组
【发布时间】:2014-11-12 17:00:04
【问题描述】:

我有一个 C# 对象列表,我正在尝试访问它的嵌套对象。这是 Visual Studio 调试器的结构(抱歉,我是该网站的新手,无法嵌入图片):

>product.Product {Product.AxdEntity_Product_EcoResProduct[1]}
>>  - [0] {Product.EcoResProductMaster}         // #1 - Please note curley braces
>>>   - [Product.EcoResProductMaster]           // #2 - Please note brackes
>>>     + base {Product....
>>>     + ModelingPolicy
>>  + Identifier

要访问 #1 中的属性,我会执行以下操作:

var prod = product.Product[0];

然后我可以这样访问“标识符”:

var identifier = prod.Identifier[0]...

要访问 #2 中的属性(例如 ModelingPolicy),我不知道该怎么做:

var prod = product.Product[0][WhatShouldGoHere?].ModelingPolicy[0] ...?? I need help here

最后,我想像使用 prod.Identifier[0] 一样访问 ModelingPolicy[0]。 Product 类是从 Web 服务返回的,我无权访问它的定义。至少我不这么认为。

感谢您的指导!

【问题讨论】:

  • 您应该从使用数组切换到 List<T> 或其他通用集合。它在 99% 的情况下更合适。此外,您应该修改您的帖子以包含您的产品类的类结构和您的标识符类。
  • 查看调试器并不是确定代码应该是什么的好方法,因为调试器显示的内容超出了您在运行时所能确定的范围。我将发布具有Product 属性的类型和数组类型的类定义(看起来像AxdEntity_Product_EcoResProduct)。
  • 感谢您的提示。我将对其进行修改,但请注意,我从 Web 服务获取结果作为 Product 类,因此此处列出的内容是服务返回给我的所有对象。我只是想访问#2 及其属性。我已经更新了这个问题,希望能更清楚。

标签: c# arrays object


【解决方案1】:

在我看来是这样的:

var ecoResProductMaster = product.Product[0].EcoResProductMaster; // Product type
var modelingPolicy = ecoResProductMaster.ModelingPolicy;

你试过了吗?

【讨论】:

  • 完美!!这给了我一个想法。如果我执行 product.Product[0].EcoResProductMaster,它会给我一个错误,因为“EcoResProductMaster”不是 Product[0] 的属性。但是,如果我这样转换: (EcoResProductMaster)product.Product[0] 那么我可以访问内部对象。谢谢一百万!
【解决方案2】:
var productList = product.ToList()
foreach(var prod in productList)
{
    var identifier = prod.identifier
    foreach (var modelingPolicy in identifier.ModelingPolicy)
    {
     //do somthing with modeling policy
    }
    //do more stuff with product
}

顺便说一句,请整理一下您的命名约定。有一个名为 product 的数组包含许多 Product 对象只是令人困惑

【讨论】:

    【解决方案3】:

    很难说出你在这里的目的。这是列表还是数组?

    如果它是一个列表,那么您可以通过列表来访问每个对象。

    如果你有

    List<SomeObject> someObjectList = new List<SomeObject>();
    

    然后,在将一堆 SomeObjects 添加到 List 之后,您可以在 foreach 循环中访问 SomeObjects。

    foreach (SomeObject s in someObjectList)
    {
       // then to access nested objects
       var n = s.SomeNestedObject;
       // do something with n
    }
    

    【讨论】:

      【解决方案4】:

      感谢大家的意见。 SmartDev 的回答帮助我访问了内部数组中的对象。为此,只需执行以下操作:

      var productMaster = (EcoResProductMaster)product.Product[0];
      var modelingPolicy = productMaster.ModelingPolicy[0];
      

      当然,这是假设数组中只返回一个对象,因此是“[0]”,但这最终应该进入 foreach 循环。

      我学到的是,如果返回的对象没有像上面提到的 //#2 这样的索引,那么类型转换应该允许我访问它。但是,如果返回一个索引,例如 //#1,那么使用 [0] 将允许我访问它的属性。

      【讨论】:

        猜你喜欢
        • 2018-02-20
        • 1970-01-01
        • 2016-01-09
        • 1970-01-01
        • 1970-01-01
        • 2018-01-24
        • 2015-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多