Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编写一个除了抛出异常之外什么都不做的方法是一种糟糕的做法吗?_C#_Asp.net Mvc_Asp.net Mvc 3_Exception - Fatal编程技术网

C# 编写一个除了抛出异常之外什么都不做的方法是一种糟糕的做法吗?

C# 编写一个除了抛出异常之外什么都不做的方法是一种糟糕的做法吗?,c#,asp.net-mvc,asp.net-mvc-3,exception,C#,Asp.net Mvc,Asp.net Mvc 3,Exception,标题差不多就是这么说的,但这里有一些背景: 我有一个ASP.NETMVC应用程序,需要检查文件路径列表是否存在。如果任何路径不存在,则返回错误 目前,我有一个实现OneException事件的基本控制器。在这里,将处理任何未处理的异常,并向用户返回一个包含异常消息的错误页面 对我来说,进行上述检查最简单的方法是编写一个方法,检查每个路径是否存在,如果其中任何一条路径失败,我只需抛出(并记录)一个异常。然后,此异常由基本控制器处理,并将相应的消息返回给用户 我的问题是这样做感觉很糟糕。我正在编写一

标题差不多就是这么说的,但这里有一些背景:

我有一个ASP.NETMVC应用程序,需要检查文件路径列表是否存在。如果任何路径不存在,则返回错误

目前,我有一个实现OneException事件的基本控制器。在这里,将处理任何未处理的异常,并向用户返回一个包含异常消息的错误页面

对我来说,进行上述检查最简单的方法是编写一个方法,检查每个路径是否存在,如果其中任何一条路径失败,我只需抛出(并记录)一个异常。然后,此异常由基本控制器处理,并将相应的消息返回给用户


我的问题是这样做感觉很糟糕。我正在编写一个返回void的方法,它的唯一目的是在少数情况下抛出一个异常,即其中一条路径不存在,在大多数情况下它什么也不做。这是个坏主意吗?

这没什么错

NET framework也会这样做:例如,
CancellationToken
有一个方法,根据某些条件,除了抛出或不抛出外,什么都不做


另一个示例:
Dispatcher
的方法,该方法检查调用方是否与应该访问的控件位于同一线程上,如果不是,则抛出。在.net上存在执行抛出新的notimplementedexception的选项,因此您可以创建方法并在以后实现它们。所以这不是一个坏做法,坏做法是在将应用程序发布到生产环境时将它们留在那里。无缘无故地犯错误是不好的做法

对于TDD(测试驱动开发)也非常有用,您可以创建方法,然后创建单元测试,该单元测试因notimplemented异常而失败,最后实现该方法以通过测试


顺便说一句,它回答了你问题的标题,但是你应该重命名这个问题,因为你的方法做了一些事情。如果它做了一些事情并且总是抛出异常,这是一种不好的做法,异常代价高昂,那么您应该记录错误并继续,没有异常。最好使用返回布尔值的PathExists函数,这是一个更好的解决方案。(即使有人无缘无故地投票给我-1…嘿嘿)

有些人可能会说这是个坏主意,但有时,没有明智的选择。如果您希望引发异常以将错误传递回某个调用方(可能通过不透明的第三方代码与引发者隔离),那么就这样做。最后的仲裁者——“它有效吗?”

是什么让你认为它错了?这是一种常见的做法,您甚至可以在.NETFramework源代码中看到它的示例。我想这感觉是错的。但得到一些反馈是很好的,事实并非如此。我给了你一个+1来鼓励你留在网站上,但我也认为这不是一个好答案:我认为这没有抓住问题的重点。您使用
NotImplementedException
的示例完全不同。另外,你的答案的第三段也有点不相关,你应该把它作为评论发布。这个方法并不总是抛出异常,事实上绝大多数调用都不会抛出异常。只有当其中一条路径不存在时才会引发异常,通常情况下情况并非如此。返回布尔值也意味着我丢失了关于哪个路径无效的信息。顺便说一句,我没有投你反对票,你的理由解释得很好,很有道理,但它不太适合我的情况。然后,通常情况下,如果失败,它会抛出一个异常,如果没有,它只会返回无效。因此,这并不是一个坏的做法,它只是一个无效的方法,检查一些东西。