C#从值列表中验证枚举
我在某个地方看到(再也找不到了),您可以使用特定的项列表检查枚举项中是否存在枚举值。举例如下——“可用=文件| xls | csv” 但是下面的代码似乎不起作用。我希望结果是=xls而不是doc,因为它在“可用”值列表中 有人能帮忙吗 提前谢谢 尼基 按钮代码:C#从值列表中验证枚举,c#,enums,C#,Enums,我在某个地方看到(再也找不到了),您可以使用特定的项列表检查枚举项中是否存在枚举值。举例如下——“可用=文件| xls | csv” 但是下面的代码似乎不起作用。我希望结果是=xls而不是doc,因为它在“可用”值列表中 有人能帮忙吗 提前谢谢 尼基 按钮代码: protected void btnTest01_Click(object sender, EventArgs e) { TestEnum01 result1 = TestEnum01.xls; TestEnum02 r
protected void btnTest01_Click(object sender, EventArgs e)
{
TestEnum01 result1 = TestEnum01.xls;
TestEnum02 result2 = TestEnum02.xls;
TestEnum03 result3 = TestEnum03.xls;
if (result1 != TestEnum01.Available)
{
result1 = TestEnum01.doc;
}
if (result2 != TestEnum02.Available)
{
result2 = TestEnum02.doc;
}
if (result3 != TestEnum03.Available)
{
result3 = TestEnum03.doc;
}
this.txtTest01_Results.Text =
String.Format("01: Result = {0}, Available = {1}\r\n\r\n02: Result = {2}, Available = {3}\r\n\r\n03: Result = {4}, Available = {5}",
result1.ToString(), TestEnum01.Available,
result2.ToString(), TestEnum02.Available,
result3.ToString(), TestEnum03.Available);
}
列举
结果:
01: Result = doc, Available = Available
02: Result = doc, Available = csv
03: Result = doc, Available = csv
您必须使用:
然后要测试它:
TestEnum01 test = TestEnum01.doc | TestEnum01.txt;
bool isDoc = (test & TestEnum01.doc) == TestEnum01.doc;
请注意,在您的示例中,您将遇到unknown
值的问题,因为按二进制顺序,1 | 4=5。。。这意味着doc和xls会产生未知的。。。为了避免此类问题,我更喜欢使用直接位移位表示法:
[Flags]
public enum TestEnum01
{
unknown = 0,
doc = 1 << 0,
txt = 1 << 1,
xls = 1 << 2,
csv = 1 << 3,
Available = doc | xls | csv
}
您必须使用:
然后要测试它:
TestEnum01 test = TestEnum01.doc | TestEnum01.txt;
bool isDoc = (test & TestEnum01.doc) == TestEnum01.doc;
请注意,在您的示例中,您将遇到unknown
值的问题,因为按二进制顺序,1 | 4=5。。。这意味着doc和xls会产生未知的。。。为了避免此类问题,我更喜欢使用直接位移位表示法:
[Flags]
public enum TestEnum01
{
unknown = 0,
doc = 1 << 0,
txt = 1 << 1,
xls = 1 << 2,
csv = 1 << 3,
Available = doc | xls | csv
}
您必须使用:
然后要测试它:
TestEnum01 test = TestEnum01.doc | TestEnum01.txt;
bool isDoc = (test & TestEnum01.doc) == TestEnum01.doc;
请注意,在您的示例中,您将遇到unknown
值的问题,因为按二进制顺序,1 | 4=5。。。这意味着doc和xls会产生未知的。。。为了避免此类问题,我更喜欢使用直接位移位表示法:
[Flags]
public enum TestEnum01
{
unknown = 0,
doc = 1 << 0,
txt = 1 << 1,
xls = 1 << 2,
csv = 1 << 3,
Available = doc | xls | csv
}
您必须使用:
然后要测试它:
TestEnum01 test = TestEnum01.doc | TestEnum01.txt;
bool isDoc = (test & TestEnum01.doc) == TestEnum01.doc;
请注意,在您的示例中,您将遇到unknown
值的问题,因为按二进制顺序,1 | 4=5。。。这意味着doc和xls会产生未知的。。。为了避免此类问题,我更喜欢使用直接位移位表示法:
[Flags]
public enum TestEnum01
{
unknown = 0,
doc = 1 << 0,
txt = 1 << 1,
xls = 1 << 2,
csv = 1 << 3,
Available = doc | xls | csv
}
你的问题到底是什么还不清楚。你能解释清楚吗?此外,这3个枚举也令人困惑。它们是显示您的尝试还是..?我的问题是,我是否可以使用另一个带有值列表的枚举项检查枚举项是否存在。在上面的示例中,我正在检查TestEnum01.xls是否存在于TestEnum01.Available中的值列表中。但是“if(result1!=TestEnum01.Available)”似乎不起作用。请使用HasFlag方法
if(result.HasFlag(TestEnum01.xls))
并使用FlagsAttribute
进行转换。如果enum未知或不在可用值列表中,我使用HasFlag将默认值设置为doc。“如果(!TestEnum01.Available.HasFlag(input)| |(input==TestEnum01.unknown))”,您的问题究竟是什么并不清楚。你能解释清楚吗?此外,这3个枚举也令人困惑。它们是显示您的尝试还是..?我的问题是,我是否可以使用另一个带有值列表的枚举项检查枚举项是否存在。在上面的示例中,我正在检查TestEnum01.xls是否存在于TestEnum01.Available中的值列表中。但是“if(result1!=TestEnum01.Available)”似乎不起作用。请使用HasFlag方法if(result.HasFlag(TestEnum01.xls))
并使用FlagsAttribute
进行转换。如果enum未知或不在可用值列表中,我使用HasFlag将默认值设置为doc。“如果(!TestEnum01.Available.HasFlag(input)| |(input==TestEnum01.unknown))”,您的问题究竟是什么并不清楚。你能解释清楚吗?此外,这3个枚举也令人困惑。它们是显示您的尝试还是..?我的问题是,我是否可以使用另一个带有值列表的枚举项检查枚举项是否存在。在上面的示例中,我正在检查TestEnum01.xls是否存在于TestEnum01.Available中的值列表中。但是“if(result1!=TestEnum01.Available)”似乎不起作用。请使用HasFlag方法if(result.HasFlag(TestEnum01.xls))
并使用FlagsAttribute
进行转换。如果enum未知或不在可用值列表中,我使用HasFlag将默认值设置为doc。“如果(!TestEnum01.Available.HasFlag(input)| |(input==TestEnum01.unknown))”,您的问题究竟是什么并不清楚。你能解释清楚吗?此外,这3个枚举也令人困惑。它们是显示您的尝试还是..?我的问题是,我是否可以使用另一个带有值列表的枚举项检查枚举项是否存在。在上面的示例中,我正在检查TestEnum01.xls是否存在于TestEnum01.Available中的值列表中。但是“if(result1!=TestEnum01.Available)”似乎不起作用。请使用HasFlag方法if(result.HasFlag(TestEnum01.xls))
并使用FlagsAttribute
进行转换。如果enum未知或不在可用值列表中,我使用HasFlag将默认值设置为doc。“如果(!TestEnum01.Available.HasFlag(input)| |(input==TestEnum01.unknown))”锐化,我如何使用该逻辑来测试我传递的值(例如TestEnum01.xls)是否存在于TestEnum01.Available中?只需使用bool isDoc=。。。或者HasFlag()谢谢。如果enum未知或不在可用值列表中,我使用HasFlag将默认值设置为doc。“如果(!TestEnum01.Available.HasFlag(input)| |(input==TestEnum01.unknown)),其中input=TestEnum01.xls例如.Sharped,我如何使用该逻辑来测试我传递的值(例如TestEnum01.xls)是否存在于TestEnum01.Available中?只需使用bool isDoc=。。。或者HasFlag()谢谢。如果enum未知或不在可用值列表中,我使用HasFlag将默认值设置为doc。“如果(!TestEnum01.Available.HasFlag(input)| |(input==TestEnum01.unknown)),其中input=TestEnum01.xls例如.Sharped,我如何使用该逻辑来测试我传递的值(例如TestEnum01.xls)是否存在于TestEnum01.Available中?只需使用bool isDoc=。。。或者HasFlag()谢谢。如果enum未知或不在可用值列表中,我使用HasFlag将默认值设置为doc。“如果(!TestEnum01.Available.HasFlag(input)| |(input==TestEnum01.unknown))”其中input=TestEnum01.xls例如.Sharped,我如何使用该逻辑来测试