C#-框架中的异常处理
我必须用C#编写一个FTP(AUTH-TSL)框架。我不擅长编写框架。C#-框架中的异常处理,c#,exception,exception-handling,frameworks,namespaces,C#,Exception,Exception Handling,Frameworks,Namespaces,我必须用C#编写一个FTP(AUTH-TSL)框架。我不擅长编写框架。 例如,当我证明一个文件存在而它不存在时,我应该怎么做 为使用框架的程序员引发异常 打印ExceptionMessage(Console.WriteLine())而不抛出 例外 在这种情况下,什么是专业的呢?我会抛出一个异常,因为这样框架的用户就可以清楚地知道发生了什么。但我会创建自己的异常类 我不会处理返回代码,因为用户必须知道并解释它们。可能会有错误。事实上,这是一个广泛的问题,但有一些线索可以让你走上正轨: 不要在框
例如,当我证明一个文件存在而它不存在时,我应该怎么做
- 为使用框架的程序员引发异常李>
- 打印ExceptionMessage(Console.WriteLine())而不抛出 例外
在这种情况下,什么是专业的呢?我会抛出一个异常,因为这样框架的用户就可以清楚地知道发生了什么。但我会创建自己的异常类
我不会处理返回代码,因为用户必须知道并解释它们。可能会有错误。事实上,这是一个广泛的问题,但有一些线索可以让你走上正轨:
Console.WriteLine()
或任何类似的东西Framework.FileExists
这样的方法,如果文件不存在,只需返回false
值即可。这就是布尔返回值的本质。这更具语义ArgumentNullException
public enum UploadResult
{
Success,
PasswordInvalid,
UserInvalid,
FileNotFound,
HostNotFound
}
然后,框架的用户可以像这样轻松地使用它:
if (Ftp.Upload(User, Pass, Host, File) != UploadResult.Success)
{
MessageBox.Show("Sorry, something went terribly wrong.");
}
或者检查更具体的原因,然后重试
编辑:正如我在对您的原始帖子的评论中所写的:如果发生了意外事件或用户输入明显无效,抛出异常。如果您使用此框架,您希望发生什么?专业的例外是吞咽异常…如上所述,您希望发生什么,或者更确切地说,你希望发生什么。例如,当您调用一个返回布尔值的方法CheckFileExists时,您可能会期望为true或false。但是,如果连接失败,我希望出现异常,因为无法确定文件是否存在。但是,如果相同的方法将返回一个结果,例如枚举,其中一个选项是“couldnotdeterminate”,我可以根据结果编写自己的逻辑。最后,总是有一个选项包含一个参数“Throw”,如果需要,它会抛出。OK,用户必须设置用户名、密码和主机。当他试图上传/下载文件时,我必须检查这些数据。我该怎么办?抛出自定义异常还是什么?在C#中,通常只有在真正“意外”的情况下才会抛出异常。由于密码丢失而无法打开连接并非意外。因此,函数应该返回一个值,指示操作是否成功。在下载数据时拔出网络电缆更出乎意料,但可能仍然只是一个正常的故障,人们希望框架能够处理。如果您的框架被传递了一个大小为-6MB的文件,目标文件夹为空,或者操作系统告诉您它的RAM不足,这是值得一提的。另外,记录该方法可能引发的任何异常。为了正确使用框架,框架的使用者需要知道可能出现的错误。