2016-09-15 29 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

所以,一切都還好,直到我決定在DiamondListingPage中爲屬性創建foreach循環。 所有類都具有相同的接口並覆蓋特定的方法。我會爲DiamondListingPage的每個聚合子類調用此方法。 公共覆蓋無效VerifyExpectedElementsAreDisplayed(){ 的foreach(在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方法,你可以控制哪些屬性將遍歷。

相關問題