2014-11-12 3 views
0

У меня есть список объектов 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 (например, ModelingPo licy), я не уверен, как идти об этом:

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

В конце концов, я хотел бы получить доступ к ModelingPolicy [0], как я сделал с prod.Identifier [0]. Класс Product возвращается из веб-службы, и у меня нет доступа к его определению. По крайней мере, я не думаю, что знаю.

Благодарим за любые рекомендации!

+3

Вам следует переключиться с массива на [Список ] (http://msdn.microsoft.com/en-us/library/6sh2ey19 (v = vs.110) .aspx) или другую общую коллекцию. Это более уместно в 99% ситуаций. Кроме того, вы должны внести изменения в свой пост, чтобы включить структуру класса вашего класса продукта и ваш класс идентификатора. – mason

+0

Поиск в отладчике - отличный способ определить, какой код должен быть, поскольку отладчик покажет вам больше, чем вы можете определить во время выполнения. Я бы опубликовал определения классов для типа, имеющего свойство «Продукт» и тип массива (выглядит как «AxdEntity_Product_EcoResProduct»). –

+0

Спасибо за подсказку. Я пересмотрю это, но обратите внимание, что я получаю результаты как класс продукта из веб-службы, поэтому здесь перечисляется весь один объект, возвращаемый мне службой. Я просто пытаюсь получить доступ к # 2 и его свойствам. Я обновил этот вопрос в надежде сделать его более ясным. – user1085821

ответ

0

кажется мне, как:

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

Вы пробовали это?

+0

Perfect !! Это дало мне представление. Если я делаю product.Product [0] .EcoResProductMaster, это дает мне ошибку, поскольку «EcoResProductMaster» не является свойством Product [0]. Но, если я произведу как таковой: (EcoResProductMaster) product.Product [0], то я могу получить доступ к внутреннему объекту. Бесконечно благодарен!! – user1085821

0
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, просто запутывает

0

Трудно сказать, что вы собираетесь здесь. Является ли это списком или массивом?

Если это список, вы можете просто пропустить через список доступ к каждому объекту.

Как, если у вас есть

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

Затем после добавления кучи SomeObjects к списку вы можете просто получить доступ к SomeObjects в цикле Еогеаспа.

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

Спасибо всем за ваш вклад. Ответ от SmartDev помог мне получить доступ к объектам во внутреннем массиве. Чтобы сделать это, просто сделайте следующее:

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

Конечно, это предполагает, что только один объект возвращается в массиве, поэтому «[0]», но это в конечном счете должны идти внутри цикла Еогеасп.

То, что я узнал, было, если объект возвращается без индекса, такого как // # 2, как указано выше, приведение типов должно позволить мне получить к нему доступ. Однако, если индекс возвращается, например // # 1, то использование [0] позволит мне получить доступ к его свойствам.

Смежные вопросы