当前位置:  开发笔记 > 编程语言 > 正文

有效地处理C#方法中的单个和多个值

如何解决《有效地处理C#方法中的单个和多个值》经验,为你挑选了2个好方法。

我有一个方法,如:

AverageAndDoSomeMath (Point2)

我想知道如何处理:

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

优选使用单个实现.

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

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

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



1> mbillard..:

写两种方法

AverageAndDoSomeMath(Point2 point)

AverageAndDoSomeMath(IEnumerable points)

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

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

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

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



2> mqp..:

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

你可以在你的方法上使用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(),因为它只需要实际的数组.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有