从枚举中获取异常

本文关键字:异常 获取 枚举 | 更新日期: 2023-09-27 18:07:14

我收到了一个错误日志,显示以下代码在set

中抛出了异常
  public double Value {
        get {
            switch (DefinedUnits.Distance) {
                case DistanceUnits.Feet: { return Feet; }
                case DistanceUnits.Meters: { return Meters; }
                case DistanceUnits.NM: { return NauticalMiles; }
                default: { throw new Exception("Invalid Distance Unit Specified"); }
            }
        }
        set {
            switch (DefinedUnits.Distance) {
                case DistanceUnits.Feet: { Feet = value; break; }
                case DistanceUnits.Meters: { Meters = value; break; }
                case DistanceUnits.NM: { NauticalMiles = value; break; }
                default: { throw new Exception("Invalid Distance Unit Specified"); }
            }
        }
    }

DefinedUnits。Distance是一个enum:

public enum DistanceUnits {
        Meters,
        Feet,
        NM
    }

我无法在我的代码中看到可以发送其他内容。我没有任何地方可以将此enum视为整数,从而可以传入错误的值。用户不能告诉我他在做什么。或者更确切地说,他告诉我他在做一些不可能叫这个的事情。

是否有一个合理的解释为什么会发生这种情况,我该如何阻止它?

谢谢

从枚举中获取异常

也许这个值是在它被设置之前获取的,留下一个无效的默认值?(不可否认,如果你没有设置任何相应的整数,Meters应该对应于0…)您应该将代码调整为:

  • 抛出更具体的异常(例如InvalidOperationException)
  • 在异常消息
  • 中包含该值

如果你有堆栈跟踪,你至少应该能够看到是getter还是setter抛出了异常…

DefinedUnits。Distance要么为空,要么初始化为超出范围的值。

改变你的默认处理程序应该给你一个提示:

default: { throw new Exception("Invalid Distance Unit Specified: " + DefinedUnits.Distance != null ? DefinedUnits.Distance.ToString() : '**null**' ); }

打印到日志异常。StackTrace和(int)DefinedUnits。距离值获取更多信息

如果您使用Dotfuscator(或其他混淆软件)并将字符串值(例如"Feet")转换为enum,则有可能混淆了enum名称,并且字符串到enum的转换失败。