【问题标题】:Is there any way of checking if an enum has an object value defined in it?有什么方法可以检查枚举中是否定义了对象值?
【发布时间】:2019-12-04 08:22:04
【问题描述】:

这是我定义的枚举:

enum LogicalChange
{
    List = SyntaxKind.List,
    TildeToken = SyntaxKind.TildeToken,
    ExclamationToken = SyntaxKind.ExclamationToken,
    DollarToken = SyntaxKind.DollarToken,
    PercentToken = SyntaxKind.PercentToken,
    CaretToken = SyntaxKind.CaretToken,
    AmpersandToken = SyntaxKind.AmpersandToken,
    AsteriskToken = SyntaxKind.AsteriskToken,
    MinusToken = SyntaxKind.MinusToken,
    PlusToken = SyntaxKind.PlusToken,
    EqualsToken = SyntaxKind.EqualsToken
}

我有一组命令,只有在枚举 LogicalChange 中定义了 change.After.Parent.Kind()(返回 SyntaxKind)时才应该执行。

到目前为止,我尝试过的是- Enum.IsDefined(typeof(LogicalChange), change.After.Parent.Kind()) 但这会产生异常。我不想进行字符串比较。还有其他方法可以实现吗?

【问题讨论】:

    标签: c# .net roslyn-code-analysis


    【解决方案1】:

    这不是简单的名称或字符串比较,您需要将其转换为要与之比较的 Enum 类型。这不应触发异常:

    if (Enum.IsDefined(typeof(LogicalChange), (LogicalChange)change.After.Parent.Kind()))
    {
    }
    

    【讨论】:

      【解决方案2】:

      IsDefined 方法允许您发送三种类型作为值:

      1. 自己的枚举类型
      2. int
      3. 字符串

      所以你可以使用这些方式:

       1. Enum.IsDefined(typeof(LogicalChange), (LogicalChange)change.After.Parent.Kind())
       2. Enum.IsDefined(typeof(LogicalChange), (int)change.After.Parent.Kind())
       3. Enum.IsDefined(typeof(LogicalChange), change.After.Parent.Kind().ToString())
      
      • 注意:方法 3 对您来说是正确的,因为您在两个枚举中选择了相同的名称,但最好不要使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-28
        相关资源
        最近更新 更多