2016-09-15 31 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方法,你可以控制哪些属性将遍历。

相关问题