2016-09-15 2 views
0

В классе DiamondListingPage: PageBase Я пытаюсь создать одно сгруппированное перечислимое свойство, которое содержит другие объекты с разными типами, также полученные из PageBase.Как я могу группировать свойства разных типов в C#?

Теперь у меня есть свойства для синглов, и я не могу использовать foreach с ним.

public class DiamondListingPage : PageBase 
{ 
     public View3x3Tile View3x3Tile { get; set; } = MyPages.View3x3Tile; 
     public CombTableView CombTableView { get; set; } = MyPages.CombTableView; 
     public TableView TableView { get; set; } = MyPages.TableView; 
} 

Вместо эти три свойства Я хочу использовать коллекцию их от других классов, как DiamondListingPage.SubpagesList.TableView вместо текущего DiamondListingPage.TableView. И я также хочу использовать foreach для этой новой коллекции DiamondListingPage.SubpagesList.

View3x3Tile, CombTableView, TableView - это разные классы, полученные из PageBase.

+1

Думаю, вам нужно будет перефразировать ваш вопрос, потому что я не понимаю, чего вы на самом деле хотите достичь. –

+0

Итак, все было нормально, пока я не решил создать цикл foreach для свойств в DiamondListingPage. Все классы имеют один и тот же интерфейс и переопределяют определенные методы. Я бы назвал этот метод для каждого агрегированного подкласса от DiamondListingPage. общественного переопределения недействительным VerifyExpectedElementsAreDisplayed() { Еогеасп (Подкласс в subClassList) { subClass.VerifyExpectedElementsAreDisplayed() } где Подкласс имеет тип TableView: PageBase или CombTableView: PageBase и т.д. – Tatiana

+1

я до сих пор не понимаю. Если вам нужна коллекция свойств, вы должны использовать отражение, но я не думаю, что это то, что вы на самом деле хотите сделать ... –

ответ

0

Если я правильно понимаю, вы хотите иметь класс со свойствами, к которым вы можете получить доступ индивидуально, но также хотите получить доступ к некоторым из них, сгруппированным в виде коллекции, чтобы вы могли использовать foreach.

Для достижения этой цели вы можете использовать C# iterator method. Эти методы используют доходность возврата для возврата элементов IEnumerable. Таким образом, код будет выглядеть следующим образом:

public class DiamondListingPage : PageBase 
{ 
     public View3x3Tile View3x3Tile { get; set; } = MyPages.View3x3Tile; 
     public CombTableView CombTableView { get; set; } = MyPages.CombTableView; 
     public TableView TableView { get; set; } = MyPages.TableView; 

     public IEnumerable<PageBase> SubPagesList() { 
      yield return View3xTitle; 
      yield return CombTableView; 
      yield return TableView; 
     } 
} 

Вы можете получить доступ к определенным свойства и перебирать их, как это:

DiamondListingPage x = new DiamondListingPage(); 
x.View3xTitle = null // accessing individual property 

foreach (PageBase p in x.SubPagesList()) { 
    // do something with p 
} 

Также в SubPagesList метод вы можете контролировать, какие свойства будут итерации ,

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