2016-02-02 3 views
0

У меня есть коллекция данных возвращающегося из пользовательской функции, которые я могу перечислить, хотя, но я не могу получить только один элемент (я не понимаю синтаксис):Доступ к данным из коллекции

foreach (var document in currentDoc) 
{ 
    // This works 
    item = document["MenuItemTeaserImage"].ToString(); 
} 

//Doesn't work 
string itemSingle = currentDoc[0]["MenuItemTeaserImage"].ToString() 

Если я можно перечислить через что-то есть стандартный способ я могу получить доступ к данным в одном экземпляре?

+0

Это зависит от типа 'currentDoc'. Если это «IEnumerable », то нет, вы не можете, если это может быть что-то другое. –

+0

Какой тип currentDoc? –

+0

'IList' - это интерфейс, определяющий индексатор. Возможно, как отмечали другие, 'currentDoc' является IEnumerable . Вы можете попробовать вызвать 'ToList()' on' currentDoc' и попробовать это. –

ответ

0

Я хотел бы попробовать с Linq использования Enumerable.First

var itemSingle = currentDoc.First()["MenuItemTeaserImage"].ToString(); 

Вероятной причиной для цикла работ является то, что ваш currentDoc является IEnumerable, которая поддерживает нумерацию, но не индексированный доступ.

Если вы хотите получить доступ к другим элементам, чем первый вы можете превратить currentDoc в массив currentDoc.ToArray() или в список currentDoc.ToList()

0
string itemSingle = currentDoc.Single()["MenuItemTeaserImage"].ToString(); 

Это будет работать, если существует ровно один элемент в currentDoc, он будет бросаться исключение, если есть 0 или 2+.

Если у вас есть 0 или 1 элемент, вы можете использовать currentDoc.SingleOrDefault() вместо этого, вы вернете null, если currentDoc пуст.

Если у вас есть более одного элемента, то вы можете использовать currentDoc.First() или currentDoc.FirstOrDefault(), но в этом случае вам может потребоваться подумать о том, почему у вас есть несколько элементов в вашей коллекции, а какой - «правильный» для использования.

0

Я считаю очень важным обозначить, что Single или First выдаст исключение, если элемент не найден в вашей коллекции. Я бы наклонился к SingleOrDefault или FirstOrDefault. Второй предмет, который, я считаю, неверно истолкован, вы хотите отредактировать один элемент в своей коллекции. Кроме того, вы считаете, что вам нужно захватить начальный элемент, прежде чем редактировать.

Вы можете сделать это несколько подходов:

var example = collection.ElementAt(0); 
if(example != null) 
    collection[example].Property = value; 


collection.FirstOrDefault().Property = value; 
collection.SingleOrDefault().Property = value; 

Если вы просто как первый элемент в коллекции:

var example = collection.ElementAt(0) as string; 
var example = collection.FirstOrDefault() as string; 
var example = collection.SingleOrDefault() as string; 

Те несколько подходов, будьте осторожны с ToString, если значение не существует, это вызовет исключение.

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