C # foreach над свойствами объектов, содержащихся в словаре <String, ObjectType> - PullRequest
1 голос
/ 20 июля 2009

Можно ли напрямую влиять на свойства объектов, хранящихся в коллекции Dictionary в C #?

Например, у меня есть словарь под названием Поля типа Dictionary<String, Field>. У объекта Field есть свойство Data, которое имеет тип XmlDataDocument, поэтому я хотел бы сделать что-то вроде

foreach(XmlDataDocument fieldData in Fields.Values.Data){

}

Я знаю, что это довольно тривиально, так как все, что мне нужно было бы сделать, когда вместо этого перебирать объекты поля,

XmlDataDocument fieldData = field.Data;

в пределах изменения поля, однако, если есть более быстрый способ сделать это, я хотел бы знать: -)

Ответы [ 2 ]

5 голосов
/ 20 июля 2009

В C # 3.0:

foreach (var data in Fields.Values.Select(x => x.Data))
{
}

Это не так "быстрее".

1 голос
/ 20 июля 2009

да, создайте собственную коллекцию на основе словаря, а затем добавьте в нее свой собственный итератор ...

   public class MyFieldCollection: Dictionary<string, Field>
   {
       public IEnumerable<XmlDataDocument> Data
       {
           foreach(Field f in this.Values)
              yield return f.Data;
       }
   }

Тогда в коде клиента все, что вам нужно сделать, это

  MyFieldCollection MFC = new MyFieldCollection();    
   foreach (XmlDataDocument doc in MFC.Data)
   {
       // DoWhatever (doc ); 
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...