我收到一条错误日志,显示以下代码在集合
中引发了异常 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
}
我无法在代码中看到可以发送其他内容。我没有将此枚举视为整数的地方,以便传入错误的值。用户无法告诉我他在做什么。或者更确切地说,他告诉我他正在做一些不能称之为的事情。
对于为什么会发生这种情况有合理的解释吗?我该如何阻止它?
由于
答案 0 :(得分:3)
也许值在设置之前被提取,留下一个无效的默认值? (不可否认,如果您没有设置任何相应的整数,Meters
应该对应0 ...)您应该将代码调整为:
InvalidOperationException
)如果你有堆栈跟踪,你至少应该能够看到是抛出异常的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”)转换为枚举,那么枚举名称可能会被混淆并且字符串到枚举转换失败。