我有一个接受文件名作为参数的方法,所有文件名都应以'.csv'结尾。如果传递不以.csv结尾的文件名,我应该抛出哪个异常?
或者我应该采取不同的方法?
答案 0 :(得分:16)
ArgumentOutOfRangeException - 您所描述的内容符合超出范围的异常:
当抛出异常时 参数的值在...之外 允许的值范围 通过调用的方法。
ArgumentException用于验证路径字符串中的字符而不是文件类型。
path参数是零长度 字符串,仅包含空格,或 包含一个或多个无效 字符。
恕我直言,路径验证通过图表如下所示:
如果这对您来说不够具有描述性,那么请创建自己的异常类:
public class InvalidFileTypeException : System.IO.IOException
{
public InvalidFileTypeException(string path, string acceptedTypeMask)
{
this.Message = string.Format(
"File type '{0}' does not fall within the expected range: '{1}'",
path,
acceptedTypeMask);
}
}
...
throw new InvalidFileTypeException("foo.txt", "*.csv");
答案 1 :(得分:10)
ArgumentException符合IMO法案。
答案 2 :(得分:8)
我可能会使用ArgumentException,因为它是“当提供给方法的其中一个参数无效时抛出的异常”
答案 3 :(得分:5)
检查框架中现有IO方法的文档。它描述了方法生成的异常。例如,在StreamWriter.StreamWriter(String, Boolean, Encoding, Int32) Constructor处查看http://msdn.microsoft.com/en-us/library/0wf7ab94(VS.85).aspx。我建议你保持一致的例外是 IOException 。然后,您可以添加描述详细信息的自定义消息。
IOException - path包含文件名,目录名或卷标语法的错误或无效语法。
在您的情况下,文件扩展名不正确,因此请告诉用户,如Throw New IOException("Invalid file extension.")
。
我会按照文档中的描述留下 ArgumentException , path是一个空字符串(“”)。“
请参阅Choosing the Right Type of Exception to Throw上的http://msdn.microsoft.com/en-us/library/ms229021.aspx。
答案 4 :(得分:1)
System.ArgumentException
似乎是直接的,或者作为您的例外的基类。
答案 5 :(得分:1)
如何创建自己的InvalidFilenameException
呢?例如:
public class InvalidFilenameException : Exception
{
public string Filename { get; private set; }
public InvalidFilenameException(string message, string invalidFilename)
:base(message)
{
Filename = invalidFilename;
}
}