我有一个方法,如:

AverageAndDoSomeMath (Point2)

我想知道如何处理:

AverageAndDoSomeMath (Point2) // single
AverageAndDoSomeMath (Point2 collection) // multiple

优选使用单个实现。

对于集合,我计划使用IEnumerable类型,因此我可以传递任何类型的集合,但对于单个值,我不想将其包装并作为集合传递,因为集合本身没有任何用途,除了满足类型。

如何以最清晰,最快速,最有效的方式处理它?

编辑:也许我应该选择一个更好的方法名称,但是该方法计算所有点的平均值,对于1值没有意义,但将其视为该值将用于表示计算另一个值,但重要的是找到平均值,所以我不能称之为第一种方法。

#1楼 票数:9

写两种方法

  • AverageAndDoSomeMath(Point2 point)
  • AverageAndDoSomeMath(IEnumerable <Point2> points)

并通过将其包装在一个集合中,使第一个调用第二个。

public decimal AverageAndDoSomeMath (Point2 point)
{
    return AverageAndSomeMath(new []{point});
}

我猜这是你已经想到的但是认为这不是正确的解决方案,对吧?

编辑:简化方法(感谢Freddy Rios)

#2楼 票数:9 已采纳

我知道你说你不想把它包起来并把它作为一个集合传递,但有两种方法你可以用最小的麻烦来做到这一点,所以我会发布它们以防万一你不知道。

你可以在你的方法上使用params:

public void Average(params Point2[] points)

之后你可以使用任意数量的参数或数组调用它:

Average(P1);
Average(P2, P3, P4);
Average(); // this one becomes an empty array in the method

Point[] array = new Point[] { P1, P2, P3, P4 };
Average(array);

或者,您可以使用短数组语法来包装对象:

Average({ P1 }); // this is legal C# for making an array with 1 element

编辑:阅读完笔记后,我建议使用params数组是最理想的方法。 唯一真正的缺点是你不能在没有先调用ToArray()情况下传入IEnumerable<Point2> (或其他集合,如List<Point2> ToArray() ,因为它只需要实际的数组。

#3楼 票数:1

每种方法的一个责任就是说你的方法应该只做一件事 - 计算算术平均值 - 就是这样。 没有“AndDoSomeOtherMath”。

如果你看一下平均值的公式 ,你当然可以用一点来计算有意义的东西。 它的标准偏差需要两个或更多。

仅供参考,您可以动态计算平均值和标准偏差,而无需存储所有值。 记忆力要容易得多。 约翰D.库克有一篇很棒的博客文章,关于如何为标准偏差做这件事。

  ask by Joan Venge translate from so

未解决问题?本站智能推荐:

2回复

C#中的重写方法

在学习了整个学期的 Java 之后,我目前正在自己​​学习 C#。 java(或一般的面向对象编程)的特性之一是能够覆盖继承到子类中的方法。 当我在 C# 中研究这个特性时,我试图自己覆盖一个方法,而没有研究在 C# 中覆盖方法的正确方法,看起来它起作用了。 但是,经过进一步研究,我了解到在超类中
8回复

接受具有公共属性的多个对象的C#方法?

我有几个具有一些属性的对象,这些属性对所有属性都是通用的。 例如: 对象A是X类型,它有10个属性 对象B的类型为Y,它有15个属性 对象C的类型为Z,它有7个属性 所有这些对象都具有共同的“名称”,“签名”和“校验和”属性。 我正在尝试创建一个静态帮助器方法,该方法可以接受
2回复

是否可以在C#中完成虚拟方法?

我的意思是,有可能将C#中的虚拟方法标记为final,因此没有其他类型派生自此类型,可以再次覆盖它吗?
4回复

C#中的静态方法与实例方法

对于我正在编写的应用程序,我希望具有极端的可扩展性,并且扩展方法似乎能够提供我想要的内容,以及在没有实例的情况下调用它们的能力,我也需要它。 我记得读过静态方法比实例方法更快但没有得到GC的优点。 这个对吗? 我不太可能改变我的设计,除非我找到一个更好的替代设计而不是速度。 但仍然需
7回复

C#在方法中是否有方法概念?

我一直在使用javascript,我在函数内部使用了很多函数。 我在C#中试过这个,但似乎它们不存在。 如果我有以下内容: 如何编写方法d()只能从方法内部调用方法abc() ?
3回复

参数值类型为C#的C#中的交换方法是否无效?

检查此方法: 比这更有效吗? 我正在使用这些方法,如下所示: 哪种方法更有效?为什么?
9回复

C#类可以有多少种方法

C#类可以拥有的属性数量是否有限制? 我快速浏览标准ECMA-334并没有找到任何相关信息。 在进入为什么一个有很多方法的课程设计不好之前,我想更明确一下这个意图。 当然,我不会手动编写一个包含大量方法的类。 我问这个的原因是我需要通过代码生成大量的执行单元。 我讨论的是具有单个方
8回复

C#,编写更长的方法或更短的方法?

我对此有两种矛盾的看法。 一些消息来源说减少方法调用的方法应该少一些,但是其他一些消息来源说,编写更短的方法对于让JIT进行优化是有好处的。 那么,哪一方是正确的?