是否有(简单)方法建立“安排”级别系统(1级> 2级> 3级)和“cherrypick”系统(只获得Cat + Cat Owner + Cat Race)而无需写作2个分开的程序?理想情况下,级别系统使用cherrypick系统,但我不需要指定每个“樱桃”本身,因为我不需要能够为所有事情做好准备。
我正在考虑这样的事情
Option Explicit
Sub FilterCstomers()
Dim PvtTbl As PivotTable
Dim PvtItm As PivotItem
Dim f As String
f = InputBox("Type the text you want to filter:")
' set the pivot table
Set PvtTbl = Sheets("Customers Pivot").PivotTables("Customers_PivotTable")
With PvtTbl.PivotFields("Concatenation for filtering")
.ClearAllFilters
For Each PvtItm In .PivotItems
If PvtItm.Name Like "*" & f & "*" Then
PvtItm.Visible = True
Else
PvtItm.Visible = False
End If
Next PvtItm
End With
End Sub
最好的方法是将以下内容合并在一起,这样标志系统就不会与级别系统分离
GetCats(catId, 1); //Select cat with objects in level 1
GetCats(catId, 0, flag.Owner); //select Cat and load only Owner
我有一个对象,我们称之为“猫”,还有许多其他属性,如“所有者”。信息从数据库加载(Cat和所有者是2个表),关系通过Id工作。我在存储库的帮助下加载数据,该存储库也填充其他对象,因此我可以访问Cat.Owner.Name。 加载适用于不同级别,级别0仅获取猫本身,级别1获取Cat并将Owner-obj附加到Cat.Owner并将Race-obj附加到Cat.Race。
有许多像Cat.Owner这样的物体在等级到达某一点时会被加载。
我现在需要访问一个只在高级别加载的对象,但我不需要90%的其他也加载的对象。我可以编写一个新函数,只获取我需要的对象。这样做很好但对我来说似乎不是最好的练习,因为如果我将来遇到类似的问题,我必须编写另一个函数,这很可能。
我的想法是使用标志(枚举)代替我可以指定要加载的级别。但是如果他们希望负载达到最高水平,那么每个人都必须提交每个标志。 (最低旗和最高旗之间的每个旗帜)
答案 0 :(得分:0)
您可以对方法的输入参数使用默认值,并且在调用方法时,只传递所需的参数。如果您未传递参数,则将使用默认值。
所以你的方法看起来像这样:
public string GetCat(int catId, int level = 1, flag cherries = null)
{
//get Cat here
if(level > 0)
{
Cat.Owner = ownerRepository.GetById(Cat.OwnerId);
//load more
}
if(level > 1)
{
//and so on
}
if(cherries.HasFlag(Owner) && Cat.Owner != null)
{
Cat.Owner = ownerRepository.GetById(Cat.OwnerId);
}
if(cherries.HasFlag(Race) && Cat.Race != null)
{
Cat.Race= RaceRepository.GetById(Cat.RaceId);
}
//more cherrypicking here
}
使用上面的方法声明,第一个参数(catId)是必需的,必须在调用方法时传递。另外两个参数是可选的,如果没有在方法callm中定义,则将使用它们的defualt值。