如何在C#中对不同类型的属性进行分组?

时间:2016-09-15 14:38:43

标签: c# collections foreach properties pageobjects

在类DiamondListingPage:PageBase中 我尝试创建一个分组枚举属性,其中包含从PageBase派生的不同类型的其他对象。

现在我有单打属性,我不能使用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 :(得分:0)

如果我理解正确,您希望拥有可以单独访问的属性的类,而且您希望访问其中一些以集合形式分组的属性,以便您可以在它们上使用 foreach

您可以使用C# iterator method来实现这一目标。 Theese方法使用 yield return 来返回 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 方法中,您可以控制将迭代哪些属性。