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

本文关键字:属性 同类型 | 更新日期: 2023-09-27 18:07:12

在类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。我还想对这个新集合DiamondListingPage.SubpagesList使用foreach。

View3x3Tile, CombTableView, TableView它们是不同的类从PageBase派生而来

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

如果我理解正确的话,您想要具有可以单独访问的属性的类,但也想要以集合的形式访问它们中的一些,以便您可以使用foreach对它们。

可以使用c#迭代器方法来实现。这些方法使用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方法中你可以控制哪些属性将被迭代。