I have a method like:
AverageAndDoSomeMath (Point2)
and I wonder how to handle:
AverageAndDoSomeMath (Point2) // single
AverageAndDoSomeMath (Point2 collection) // multiple
using a single implementation preferably.
For collection, I plan to use the IEnumerable type so I can pass any kind of collection, but for a single value, I don't want to wrap and pass it as a collection, because the collection itself serves no purpose, other than to satisfy the type.
How to best handle it in the clearest, fastest, most efficient way?
EDIT: Maybe I should have chosen a better method name, but the method calculates the average of all the points, for 1 value it doesn't make sense, but think of it as that the value will be used to say calculate another value, but what's important is finding the average, so I can't call the 1st method.
I know you said you didn't want to wrap it and pass it as a collection, but there are two ways you can do this with minimal hassle, so I'll post them in case you weren't aware of one.
You could use params on your method:
public void Average(params Point2[] points)
after which you can call it with any number of arguments, or with an array:
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);
Or alternately, you can use short array syntax to wrap up your object:
Average({ P1 }); // this is legal C# for making an array with 1 element
EDIT: After reading your note, I would suggest that a params array is the clearest way to do what you want. The only real downside to it is that you can't pass in an IEnumerable<Point2> (or other collections like a List<Point2>) without first calling ToArray(), because it only takes actual arrays.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With