我有一个方法,如:
AverageAndDoSomeMath (Point2)
我想知道如何处理:
AverageAndDoSomeMath (Point2) // single AverageAndDoSomeMath (Point2 collection) // multiple
优选使用单个实现.
对于集合,我计划使用IEnumerable类型,因此我可以传递任何类型的集合,但对于单个值,我不想将其包装并作为集合传递,因为集合本身没有任何用途,除了满足类型.
如何以最清晰,最快速,最有效的方式处理它?
编辑:也许我应该选择一个更好的方法名称,但是该方法计算所有点的平均值,对于1值没有意义,但将其视为该值将用于表示计算另一个值,但重要的是找到平均值,所以我不能称之为第一种方法.
写两种方法
AverageAndDoSomeMath(Point2 point)
AverageAndDoSomeMath(IEnumerable
并通过将其包装在一个集合中,使第一个调用第二个.
public decimal AverageAndDoSomeMath (Point2 point) { return AverageAndSomeMath(new []{point}); }
我猜这是你已经想到的但是认为这不是正确的解决方案,对吧?
编辑:简化方法(感谢Freddy Rios)
我知道你说你不想把它包起来并把它作为一个集合传递,但有两种方法你可以用最小的麻烦来做到这一点,所以我会发布它们以防万一你不知道.
你可以在你的方法上使用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数组是最理想的方法.它唯一真正的缺点是你不能在没有第一次调用的情况下传入IEnumerable
(或其他类似的集合List
)ToArray()
,因为它只需要实际的数组.