有什么方法可以检查枚举中是否定义了对象值?

Is there any way of checking if an enum has an object value defined in it?

这是我定义的枚举:

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.[=15= 中定义了 change.After.Parent.Kind()(其中 returns 和 SyntaxKind)时才应执行这些命令]

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

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

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

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

  1. 自己的枚举类型
  2. 整数
  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 对你来说是正确的,因为你在两个枚举中选择了相同的名称,但最好不要使用它。