有没有办法检查枚举中是否定义了对象值?

问题描述 投票:0回答:2

这里是我定义的枚举。

 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
2个回答
2
投票

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

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

0
投票

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

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

因此您可以通过以下方式使用IsDefined:

 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种方法对您来说是正确的,因为您在两个枚举中都选择了相同的名称,但是最好不要使用它。
© www.soinside.com 2019 - 2024. All rights reserved.