我有两个对象:
public enum BugReportStatus
{
OpenUnassigned = 0,
OpenAssigned = 1,
ClosedAsResolved = 2,
ClosedAsRejected = 3
}
和
public enum BugReportFilter
{
Open = 1,
...
Closed = 4,
}
我想创建一个switch case
,根据BugReportFilter
选择,我的输出将是特定的BugReportStaus
。
所以我创建了一个方法CheckFilter
private BugReportStatus Checkfilter(BugReportFilter filter)
{
switch (filter)
{
case BugReportFilter.Open:
return BugReportStatus.OpenAssigned;
case BugReportFilter.Closed:
return BugReportStatus.ClosedAsResolved;
}
};
问题是,在BugReportFilter.Open
选项的情况下,我应该返回BugReportStatus.OpenAssigned
AND BugReportStatus.OpenUnassigned
,有没有办法将这两个选项连接起来一次回归?
答案 0 :(得分:4)
选项功能为2,例如
public enum Flags
{
A = 1,
B = 2,
C = 4
}
然后从函数返回Flags.B | Flags.A
(返回类型应为int
)。
以下是检查标志是否已设置的方法
bool isA = (enumFlag & Flags.A) != 0; // true means A is set
有关详细信息,请参阅here。
答案 1 :(得分:4)
您可以返回IEnumerable<BugReportStatus>
:
private IEnumerable<BugReportStatus> Checkfilter(BugReportFilter filter)
{
switch (filter)
{
case BugReportFilter.Open:
return new[]{ BugReportStatus.OpenAssigned, BugReportStatus.OpenUnassigned };
case BugReportFilter.Closed:
return new[]{ BugReportStatus.ClosedAsResolved };
}
};
然后你可以使用Enumerable.Contains
检查它是否为f.e. BugReportStatus.OpenAssigned
:
bool isOpenAssigned = Checkfilter(someFiler).Contains(BugReportStatus.OpenAssigned);
答案 2 :(得分:3)
对于您的情况,我建议用不同的位表示返回(使用标志的概念),以便您可以连接返回:
<ons-sliding-menu
ng-show="isMobile"
var="application.slidingmenu"
swipe-target-width="100"
main-page="page1.html"
menu-page="menu.html"
side="left"
max-slide-distance="250px">
因此你可以这样做:
<ons-split-view
ng-show="!isMobile"
secondary-page="menu.html"
main-page="page1.html"
main-page-width="85%"
collapse="portrait">
并将您的返回类型更改为<?= isset($user) ? set_value('val',$this->form_validation->val) : set_value('val'); ?>
:
public enum BugReportStatus
{
OpenUnassigned = 1, //0000 0001
OpenAssigned = 2, //0000 0010
ClosedAsResolved = 4, //0000 0100
ClosedAsRejected = 8 //0000 1000
}
要检查外部结果,只需检查 switch (filter)
{
case BugReportFilter.Open:
return BugReportStatus.OpenAssigned + BugReportStatus.OpenUnassigned; //return 3
case BugReportFilter.Closed:
return BugReportStatus.ClosedAsResolved;
}
返回
答案 3 :(得分:1)
返回一个可枚举的内容呢?
GNU assembler (GNU Binutils for Ubuntu) 2.26
答案 4 :(得分:1)
您可以使用Flags属性来完成此操作。要使用此功能,您需要将BugReportStatus
的枚举值增加2,因为枚举被视为位字段。您还需要使用[Flags]
属性修饰枚举。 E.g。
[Flags]
public enum BugReportStatus
{
OpenUnassigned = 1,
OpenAssigned = 2,
ClosedAsResolved = 4,
ClosedAsRejected = 8
}
然后,您可以返回多个值,例如:return BugReportStatus.OpenAssigned | BugReportStatus.OpenUnassigned;
您可以使用Enum.HasFlags
方法检查是否已设置特定位字段。例如。
Checkfilter(BugReportFilter.Open).HasFlag(BugReportStatus.OpenAssigned) // true
Checkfilter(BugReportFilter.Open).HasFlag(BugReportStatus.ClosedAsResolved) // false