我只是想知道其他开发人员如何解决从方法中获取 2 或 3 个答案的问题。

1)返回一个对象[]
2)返回自定义类
3) 在多个变量上使用 out 或 ref 关键字
4) 编写或借用 (F#) 一个简单的 Tuple<> 泛型类
http://slideguitarist.blogspot.com/2008/02/whats-f-tuple.html

我现在正在编写一些执行数据刷新的代码。从执行刷新的方法中,我想传回 (1) 刷新开始时间和 (2) 刷新结束时间。
稍后我可能想传回第三个值。

想法?开源 .NET 项目中有关于此主题的良好实践吗?

有帮助吗?

解决方案

您的问题点,你会在未来返回更多的数据的可能性,所以我会建议推行自己的类包含的数据。

这意味着,你的方法签名将保持,即使你身边掠过改变对象的内部表示,以容纳更多的数据相同。它也是可读性和封装原因很好的做法。

其他提示

这完全取决于结果是什么。如果他们彼此相关,我通常会创建一个自定义类。

如果他们没有真正的关系,我想要么使用out参数或分割的方法了。如果一个方法要返回三个无关的项目,它可能做得太多。当你跨Web服务边界或别的东西,其中“更纯”的API可能过于健谈说话的例外是。

有关2,一般为4)

不仅如此,2)

代码Architeture聪明我一直使用自定义类需要有所改变的变量,具体数额时去。为什么?很简单,因为一类实际上是一种经常使用的数据类型的“蓝图”,创建自己的数据类型,它在这种情况下,将有助于你得到一个很好的结构和帮助他人计划你的界面。

个人而言,我讨厌出/ REF PARAMS,所以宁可不使用这种方法。此外,大多数的时候,如果你需要返回不止一个结果,你可能做错了什么。

如果它真的是不可避免的,你可能会从长远来看编写自定义类最幸福的。返回数组是诱人的,因为它很容易和有效地在短期teerm,但使用一类让你改变在未来的返回类型,而不必担心到很多关于造成问题的往下流的选项。想象一个调试恶梦的电位,如果有人交换阵列中的两个元件所返回的顺序....

我使用,如果它只有1或2个额外的变量(例如,函数返回一个布尔值即实际重要的结果,而且是只要一个输出参数来返回功能多久跑,用于记录目的)

对于任何更复杂的,我通常创建自定义结构/类。

我认为最常见的方式是C#程序员会做这将是包你想在一个单独的类返回的项目。这会为您提供了最大的灵活性前进,恕我直言。

这取决于。对于内部仅API,我通常会选择最简单的选择。一般是出去了。

有关公共API,自定义类通常更有意义 - 但如果它的东西相当原始,或功能的自然结果是一个布尔值(如* .TryParse)我会用out PARAM坚持。你可以做一个自定义的类隐式转换为bool为好,但是这通常只是奇怪。

有关你的特殊情况,一个简单的不可变DATERANGE类似乎最适合我的。您可以轻松地添加新的价值,而不会干扰现有的用户。

如果你想发回更新的开始和结束时间,这表明一个可能的类或结构,或许叫DataRefreshResults。如果可能的第三值也与刷新,那么它可以增加。请记住,一个结构总是按值传递的,所以它在堆中分配不需要被垃圾收集的。

有些人用KeyValuePair两个值。这不是很大,但因为它只是标签的两个东西KeyValue。不是很描述。此外,它会严重从具有此额外的好处:

public static class KeyValuePair
{
    public static KeyValuePair<K, V> Make(K k, V v) 
    { 
        return new KeyValuePair<K, V>(k, v); 
    }
}

使您不必在创建一个指定类型。通用方法可以推断类型,通用类构造函数不能

对于您的场景,您可能需要定义通用 Range{T} 类(检查范围有效性)。

如果方法是私有的,那么我通常使用来自 我的助手库. 。公共或受保护的方法通常总是应该分开。

返回自定义类型,但不使用的一类,使用结构 - 没有存储器分配/垃圾收集开销意味着没有缺点

如果参照图2,对

如果超过2的类。

另一种解决方案是返回命名对象的引用的字典。对我来说,这是相当等同于使用自定义类的回报,但不杂乱。 (和使用RTTI和反射它只是作为类型安全任何其他溶液,尽管动态左右。)

这取决于结果的类型和含义,所述方法以及是否是私有的或不

有关私有方法,我通常只使用一个元组,从我的类库。

有关公用/被保护/内部方法(即未公开)中,我使用任一输出参数或自定义类。

举例来说,如果我实现TryXYZ模式,在那里你必须抛出异常失败,并返回一个布尔值的方法TryXYZ的XYZ方法,TryXYZ将使用的输出参数。

如果结果是序列定位(即,返回应处理3级的客户),那么我将典型地返回一些类型的集合。

除此之外,我通常只是使用自定义类。

如果一个方法输出两到三个相关值,我会他们在一个类型组。如果值是不相关的,该方法是最有可能做的方式太多了,我会把它重构为一个号码的简单方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top