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

How can I group properties of different types in C#?

在 class 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;
}

我想使用从其他 class 中收集的这三个属性,例如 DiamondListingPage.SubpagesList.TableView 而不是当前的 DiamondListingPage.TableView。而且我还想将 foreach 用于这个新集合 DiamondListingPage.SubpagesList.

View3x3Tile、CombTableView、TableView 是不同的class派生自 PageBase。

如果我理解正确的话,您希望 class 具有您可以单独访问的属性,但您也希望访问其中一些以集合形式分组的属性,以便您可以使用 foreach 在他们身上。

您可以使用 C# iterator method 来实现。这些方法使用 yield returnIEnumerable 的 return 个元素。所以代码看起来像这样:

 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 方法中,您可以控制迭代哪些属性。