c# - 清洁代码 - 输出参数是否错误?

标签 c# solid-principles

我正在查看前同事的帖子。他引用了 article 中的内容。

"In Clean Code Bob Martin disparages output arguments, saying “In general output arguments should be avoided.”

我当前的代码库是 C#。我在一个相当大的应用程序中工作。它主要以程序风格编写,经常违反 SOLID 原则。当我有机会时,我经常会把一些违反单一责任原则的方法分解成单独的方法。有时我会创建带有几个输出参数的方法,如下所示。

var value1 int;
var value2 int;

DoSomeWork(out value1, out value2);

我更喜欢这个而不是创建一个特殊类型,如果创建了一个类型,无论如何都不会重用。这是可以接受的还是有更好的方法?

最佳答案

TL:DR;如果您正在编写高级代码,则不应使用输出参数。

在某些情况下有充分的理由使用输出参数。例如,int.TryParse 是使用输出参数返回第二个值的函数的完美示例。

有人可能会争辩说这样做的原因是效率,因为它不需要构造一个包装器对象来解析一个整数。

另一方面,如果您编写高级代码,您可能应该使用包装这两个值的类或结构。如果您所做的只是返回两个值,您可以使用 Tuple 或编写您自己的几乎没有开销的 struct。我是说几乎没有开销,因为所有对象创建都会有一些开销

如果您正在编写一个需要尽可能快地运行的紧密循环,例如某种解析器,您可能会从使用输出参数中获益更多,而不必分配任何过多的对象。

关于c# - 清洁代码 - 输出参数是否错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27204827/

相关文章:

c# - 应用程序之间通用的 app.config

c# - 如何拖放到 Windows Media Control

c# - 带有 ASP.NET MVC 的 C# 中的通知系统/服务

java - 何时使用 ENUM 以及何时使用 ENTITIES 来处理域状态?

asp.net-core - Asp.net Core最佳实践示例

c++ - C++ 中的 "Has a"关系,拥有一个类 "implement"多个抽象基类是最佳实践吗?

c# - 枚举类型宽度?

c# - 从 .Net 逐帧创建视频

c# - 由同一台本地计算机上的多个应用程序并发访问轻量级/(嵌入式?)SQL 数据库?

java - 构造函数的开闭原则