如何在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派生而来
如果我理解正确的话,您想要具有可以单独访问的属性的类,但也想要以集合的形式访问它们中的一些,以便您可以使用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方法中你可以控制哪些属性将被迭代。