从枚举中获取例外

时间:2011-08-31 16:51:21

标签: c# enums

我收到一条错误日志,显示以下代码在集合

中引发了异常
  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是一个枚举:

public enum DistanceUnits {
        Meters,
        Feet,
        NM
    }

我无法在代码中看到可以发送其他内容。我没有将此枚举视为整数的地方,以便传入错误的值。用户无法告诉我他在做什么。或者更确切地说,他告诉我他正在做一些不能称之为的事情。

对于为什么会发生这种情况有合理的解释吗?我该如何阻止它?

由于

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

DefinedUnits.Distance为null或初始化为超出范围的值。

更改默认处理程序应该给你一个线索:

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

答案 2 :(得分:0)

打印到日志Exception.StackTrace和(int)DefinedUnits.Distance值以获取更多信息。

答案 3 :(得分:0)

如果您使用Dotfuscator(或其他一些混淆软件)并将字符串值(例如“Feet”)转换为枚举,那么枚举名称可能会被混淆并且字符串到枚举转换失败。