2

从一个方法返回多个东西,包括:

  • 返回具有属性的对象或
  • 使用 out 关键字来简单地修改传入的参数

使用一个系统或另一个系统有什么好处?我一直在使用对象,但刚刚发现了 out 关键字,所以想知道我是否应该费心重构。

4

4 回答 4

4

您不应该仅仅为了利用out parameters. 只要结构可重用,返回classor将是首选。struct

我建议使用的 out 参数的一个常见用途是返回可能失败的调用的状态。一个例子是int.TryParse

它有失败的可能性,所以返回 abool可以很容易地确定你是否应该使用out parameter.


从方法返回多个值的另一种可能解决方案是使用Tuple. 他们可以返回 n 个结果。例如

public Tuple<bool, bool, string> MyMethod()
{
    return new Tuple<bool, bool, string>(false, true, "yep");
}
于 2013-08-28T00:35:50.373 回答
2

一般来说,如果您返回的对象没有在您的方法或一组类似方法的返回值之外的任何其他地方使用,则表明您应该重构。当您需要创建一个特殊的类只是用作方法的返回值时,这意味着您正在解决 C# 无法从方法返回多个值的问题,因此out关键字可能是您的一个很好的选择。

另一方面,如果您在其他地方使用多部分返回值,例如将它们存储在集合中或作为参数传递给其他方法,则可能不需要重构,因为返回对象是有意义的。

比较这两种方法:

interface DictionaryReturn<T> {
    T Value {get;}
    bool Success {get;}
}
...
class Dictionary<K,V> {
    ...
    public DictionaryReturn<V> TryGetValue(K key) {
        ...
    }
}

或者

class Dictionary<K,V> {
    ...
    public bool TryGetValue(K key, out V res) {
        ...
    }
}

第一种情况引入了一个特殊的DictionaryReturn<T>类,它提供值和在字典中找到该值的指示符。很少有理由DictionaryReturn<T>在调用之外存储或使用对象TryGetValue,因此第二种选择更好。毫不奇怪,这是 .NET 集合库的设计者实现的第二个选项。

于 2013-08-28T00:33:57.353 回答
1

我更喜欢使用带有属性的对象。如果使用out关键字,则需要在其他行中定义它。不如 return Object 清晰;

于 2013-08-28T00:33:46.473 回答
0

使用 out 关键字的原因是确保方法内的代码始终为 out 参数设置一个值。这是一个编译时检查,你打算在函数中做什么,你确实做了。

于 2013-08-28T00:39:34.453 回答