Как преобразовать тип переменной в другой тип переменной - PullRequest
0 голосов
/ 08 июня 2018

У меня есть массив объектов, который был заполнен конкретными аргументами команды (типа string):

object[] args = {"@all", "1", "true"};

И у меня есть этот метод:

public void Method(string client, int num, bool type)<br/>

Iхотите передать аргументы, указанные в массиве объектов, методу.Как я могу преобразовать каждый элемент массива объектов в определенные типы, ожидаемые методом?

Примечание: Типы параметров метода НЕ ИСПРАВЛЕНЫ , поэтому мне нужно преобразоватьэлементы в массиве объектов различных типов, которые неизвестны во время компиляции.

Ошибка формата строки 49: https://pastebin.com/bQLsbs59

1 Ответ

0 голосов
/ 08 июня 2018

Вы можете использовать MethodInfo, чтобы получить параметры для метода.Затем с помощью ParameterInfo вы можете получить тип этого параметра.Затем последним шагом будет использование Convert для изменения типа каждой строки на правильный тип.

object[] args = { "@all", "1", "true" };

MethodInfo methodInfo = typeof(Form1).GetMethod("Method");
ParameterInfo[] paramInfos = methodInfo.GetParameters();

// Should check that args.Length == paramInfos.Length.

// The arguments converted to their correct types will go in here.
object[] convertedArgs = new object[args.Length];

for (int i = 0; i < args.Length; i++)
{
  // Should do a try/catch here in-case the string can't be
  // converted to the parameter type. i.e. trying to convert
  // "abc" to an int.

  // Change each string to the appropriate type.
  convertedArgs[i] = Convert.ChangeType(args[i],
    paramInfos[i].ParameterType);
}

// Finally, we can call the method with the arguments that have
// been converted to the correct types.
methodInfo.Invoke(this, convertedArgs);
...