I have the following C# methods:
public Vector2 GetVectorToTile(int x, int y)
{
return new Vector2(x * TileWidth, y * TileHeight);
}
public Vector2 GetVectorToTile(Point start)
{
return GetVectorToTile(start.X, start.Y);
}
The second method overloads the first in a very simple manner. However, I don’t really like such an “input sanitizer overload”- I feel that there shouldn’t be a separate method for converting each possible input type.
Now if the input of the first method was a single Vector2 instead of two numbers, I could use conditional arguments such that if the argument is Point instead of Vector2, it should first convert from Point to Vector2 and then proceed as usual.
However, that is not the case.
So my question is, how can I tell the method to accept “EITHER two integers OR a single point”, and then convert the latter into the former before computing a result?
I can do this in a contrived manner in Matlab, but it looks completely unrelated to C#:
function result = VectorToTile(varargin)
x = 0;
y = 0;
if size(varargin{1}) == [1, 1]
disp('Assuming Vector input!');
x = varargin{1}{1}.x; % Assuming the "Vector2" equivalent is a struct with .x and .y
y = varargin{1}{1}.y;
else
disp('Assuming integer pair input!');
x = varargin{1}{1};
y = varargin{1}{2};
end
result.x = x * 32; % An example value for TileWidth
result.y = y * 32; % An example value for TileHeight
end
This will work with the following two inputs:
ints{1} = 25;
ints{2} = 125;
VectorToTile(ints);
vect{1}.x = 25;
vect{1}.y = 125;
VectorToTile(vect);
It illustrates what I want to do, but unfortunately there isn’t really a varargin in C#, nor is everything treated as a matrix.
You could use a parameter array
paramskeyword to pass in an object array.e.g.:
Then you can check how many is in your array and process accordingly.
But surely strongly typed parameters are better?