How would I pass a list of values into a function, where the values are already stored in a list and the function isn’t the same every time?
To explain, I’ve got a list of several different types of custom objects (A List<object> to make this work) and I want to pass those objects into a function. However, the function isn’t always the same. I could have several different functions, and, assuming that List’s contents will always match the function’s input variables, I want to be able to pass the list’s contents into my function.
The following code is an example of what might work, but for one flaw:
List<object> myListOfVariables = new List<object>();
myListOfVariables.Add("Hello, world!");
myListOfVariables.Add(10);
void SayHelloXTimes(string helloString, int x) {
for(int i = 0;i<x;i++) {
print(helloString)
}
}
SayHelloXTimes(myListOfVariables[0], myListOfVariables[1]);
Now, since I know my list will always contain the right amount of variables in the right positions, that would work, if I only had one function. But the problem is, I need to expand this so I could take apart my list and pass it into functions with different amounts of parameters.
For other reasons, I know my list will always have the right amount of variables in the right positions, so we don’t need to worry about that. I’ll also know the name of the function I need to pass my values into. I suppose I could do a load of if statements depending on the length of my list, like this:
if (myListOfVariables.Length == 2) {
SayHelloXTimes(myListOfVariables[0], myListOfVariables[1]);
}
else if (myListOfVariables.Length == 3) {
SayHelloXTimesForY(myListOfVariables[0], myListOfVariables[1], myListOfVariables[2]);
}
However, this (obviously) is really clunky code and I’d like to avoid it at all costs. Is there another solution to my problem? I know this is really confusing, but I did my best to explain it. If you’re still confused as to what I’m trying to do, please let me know.
And no, this is not a homework problem. 😉
I think want you want to do can be done using reflection. Look at MethodBase.Invoke Method
All you have to do is add all the parameters in the order the function expects to an object array.