我对此进行了搜索,偶然发现了this question。最上面的答案很有帮助,但我想要一些澄清,并且没有足够的声誉来发表评论,所以我为它创建了一个新的问题。
基本上,用户"The Digital Gabeg“声明,当代码的预设不满足时,抛出一个错误。给出的示例是,如果一个方法的List<>长度超过50,则返回true,否则返回false。但是,如果传递给方法的对象不是长度,方法就不能准确地返回true或false,所以它不会返回任何东西,而是抛出一个错误(尽管严格地说,这个逻辑并不是很准确,如果一个对象不是具有成员的对象类型(例如,List<>或数组),那么它的长度仍然是false,因为为了使长度超过50,它首先需要有一个为对象定义的“List<>”)。
本例中最明显的漏洞是,将方法的参数指定为List<>甚至可以避免将任何其他内容传递给该方法。不过,这并不是我真正的问题。为了便于讨论,我们假设无论出于什么原因,您都不能确保传递给该方法的对象在编译时是一个整数-即使是这样,也可以通过将该方法的返回类型从布尔值更改为List<>并指定返回值0表示false、1表示true和-1表示其他任何值来解决这类问题。这可能是对值的任意赋值,但它可以处理这种情况,而无需抛出异常。您甚至可以让它返回-1、0和1以外的其他值来表示其他内容。例如,如果传递的是数组而不是List<>,则可以使用值2和3表示true和false,但需要注意的是,虽然所提供的对象有(或没有)超过50个成员,但传递的对象并不是严格意义上的List<>....as,因为文档和/或注释中提供了此类内容。
所以我猜我的问题是,既然答案的前提是当他们试图做的事情背后的假设被破坏时,就应该抛出异常,从技术上讲,提供的示例有一个解决方案,如果可以找到这些解决方案,是比抛出异常更可取,还是抛出异常更可取,如果这取决于情况,决定因素是什么?
https://stackoverflow.com/questions/54067030
复制相似问题