我应该为Enum扩展方法使用ArgumentException还是InvalidEnumArgumentException吗?

Sam*_*tar 2 c#

我看到了两者的建议,但想确认这是执行此操作的最佳方法:                   

public enum MO
{
   Learn = 0,
   Practice = 1,
   Quiz = 2
}

public static partial class Extensions
{
   public static MO ToMode(this string mode)
   {
      switch (mode)
      {
         case "Learn": return MO.Learn;
         case "Practice": return MO.Practice;
         case "Quiz": return MO.Quiz;
         default: throw new InvalidEnumArgumentException("Unhandled value: " + mode.ToString());
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

Tsa*_*her 6

我会ArgumentException在这种情况下使用。InvalidEnumArgumentException 状态文档:

如果将无效的枚举值传递给方法或设置属性时,将引发此异常。

这不是您在这里所做的。您正在传递字符串,而不是枚举。的描述ArgumentException 看起来更合适:

提供给方法的参数之一无效时引发的异常。