Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从值列表中验证枚举_C#_Enums - Fatal编程技术网

C#从值列表中验证枚举

C#从值列表中验证枚举,c#,enums,C#,Enums,我在某个地方看到(再也找不到了),您可以使用特定的项列表检查枚举项中是否存在枚举值。举例如下——“可用=文件| xls | csv” 但是下面的代码似乎不起作用。我希望结果是=xls而不是doc,因为它在“可用”值列表中 有人能帮忙吗 提前谢谢 尼基 按钮代码: protected void btnTest01_Click(object sender, EventArgs e) { TestEnum01 result1 = TestEnum01.xls; TestEnum02 r

我在某个地方看到(再也找不到了),您可以使用特定的项列表检查枚举项中是否存在枚举值。举例如下——“可用=文件| xls | csv”

但是下面的代码似乎不起作用。我希望结果是=xls而不是doc,因为它在“可用”值列表中

有人能帮忙吗

提前谢谢

尼基

按钮代码:

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,我如何使用该逻辑来测试