2009-12-21 2 views
1

У меня есть 2 классов и в Persons классе я хочу добавить возможность пробегает через свойство названия коллекции Person с помощью цикла Еогеаспа, например:Реализация IEnumerable вопрос

foreach (string name in Persons.Names) 
{ 
// do something 
} 

Как бы я это?

Это мои классы:

class Person 
    { 
     public string Name 
     { 
      get; 
      set; 
     } 

     public string Surname 
     { 
      get; 
      set; 
     } 
    } 

    class Persons : IEnumerable<Person> 
    { 
     List<Person> persons = new List<Person>(); 
     public IEnumerator<Person> GetEnumerator() 
     { 
      foreach (Person p in persons) 
      { 
       yield return p; 
      } 
     } 

     System.Collections.IEnumerator IEnumerable.GetEnumerator() 
     { 
      return GetEnumerator(); 
     } 

     public IEnumerator<string> Names 
     { 
      // implement looping through Name property of Person class 
     } 

     public Persons() 
     { 

     } 

     public void Add(Person p) 
     { 
      persons.Add(p); 
     } 

     public string this[int index] 
     { 
      get { return this[index]; } 
     } 
    } 

ответ

7

Первый цикл может быть реализован что-то вроде этого:

foreach (Person p in Persons) 
{ 
// do something with p.Name 
} 

Вы можете реализовать свойство что-то вроде:

public IEnumerator<string> Names 
{ 
    get 
    { 
     foreach (Person p in persons) 
     { 
      yield return p.Name; 
     } 
    } 
} 

или с помощью Linq:

public IEnumerator<string> Names 
{ 
    get 
    { 
     return persons.Select(p => p.Name); 
    } 
} 
+1

Там должен быть прибудет аксессор зажатым там, а – Oskar

+0

+1 для полноты ... –

+0

Вашего LINQ кажется, путает IEnumerable с IEnumerator . – Mark

2

ли это одна работа?

foreach (Person p in persons) 
{ 
    yield return p.Name; 
} 

Приветствия Matthias

5
public IEnumerable<string> Names 
    { 
     get 
     { 
      foreach (Person p in persons) 
      { 
       yield return p.Name; 
      } 
     } 
    } 
1

Посмотрите на эту статью here и here, которые были бы полезны для вашего вопроса и ситуации.

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