Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 使用out参数的优缺点是什么_C#_.net - Fatal编程技术网

C# 使用out参数的优缺点是什么

C# 使用out参数的优缺点是什么,c#,.net,C#,.net,任何人都可以指出out参数的优缺点。当首选使用out参数而不仅仅是返回一个值时。正如您所说,如果没有out参数,您只能返回一个值,out关键字允许您“返回”多个值。在C#中,您不能返回多个变量,因此如果您不想处理一个类,您可以使用out参数来完成这项工作(返回包含这些多个变量的类)。Out参数有效地允许您从方法返回多个值,这通常比返回包含多个值的任意结构或元组更可取 有人可能会说,使用out参数的函数与传统的“多参数,一个返回值”模型不同,因此更容易忽略其可能产生的副作用。但我真诚地认为out关

任何人都可以指出out参数的优缺点。当首选使用out参数而不仅仅是返回一个值时。

正如您所说,如果没有out参数,您只能返回一个值,out关键字允许您“返回”多个值。

在C#中,您不能返回多个变量,因此如果您不想处理一个类,您可以使用out参数来完成这项工作(返回包含这些多个变量的类)。

Out参数有效地允许您从方法返回多个值,这通常比返回包含多个值的任意结构或元组更可取


有人可能会说,使用out参数的函数与传统的“多参数,一个返回值”模型不同,因此更容易忽略其可能产生的副作用。但我真诚地认为out关键字加上method post条件使程序员的意图非常清楚。

我建议查看内置类型(如int)上的方法。返回值是一个bool,表示通过out参数返回的值成功。此构造使得在循环构造中调用此方法非常有用,而另一个返回类型可能会使其更复杂


进一步思考,一个缺点可能是倾向于只向方法添加参数,而不是正确封装逻辑。

想知道为什么布尔返回在循环中很好吗?你能举个例子吗?@user496949-对于TryParse方法,你可以通过查看me的返回来处理解析失败因此,这可以避免你去处理解析异常或者寻找表示结果值无效的东西。考虑一个布尔值可能是最简单的例子。除了一个异常之外,人们如何知道得到的值是“无效的”。?使用tryParse,方法本身表示成功,结果值要么正确解析为新值,要么保持在调用方法之前的状态。我认为您发现了主要缺点。据我所知,每个out参数都需要调用方法的对象维护另一个变量。这不是“大不了”的是在过程中忽略几个额外的变量,但它确实有一个很大的可能性,即变得不必要的麻烦,而这种方法也同样容易(而且可能更合适)将所有这些信息封装到它的返回值中。我一直认为out参数只是一种次要的代码味道,因为它们倾向于建议您有一个方法,它可以做不止一件事情,可能应该分解成单独的方法。在尝试为工作中的初级开发人员创建一些编码准则时,我我做了一些研究,并决定我不能说永远不要使用out参数,因为有时候它们是有用的和必要的构造,例如重构成多个方法会导致额外的数据库往返。我不确定我是否同意这样的观点,即通常最好使用“out”“值而不是返回对象,但可能是因为我没有像您所希望的那样解释任意值。对我来说,返回值的集合(在单个返回对象中的属性),通常提供了比必须声明和维护的变量列表更大的灵活性,但我同意这两种情况都有很好的例子。它们在TryParse类型的方法中似乎非常有意义,我同意,+bool(success?)的“特殊”结构似乎有些过分。