Получить подпись MethodInfo
-
11-12-2019 - |
Вопрос
Допустим, у вас есть MethodInfo, относящийся к методу myMethod:
void myMethod(int param1, int param2) { }
и вы хотите создать строку, представляющую сигнатуру метода:
string myString = "myMethod (int, int)";
Перебирая параметры MethodInfo, я смог добиться этих результатов, вызвав методы ToString типов параметров:
"myMethod (System.Int32, System.Int32)"
Как я могу улучшить это и добиться результатов, показанных выше?
Решение
Этот вопрос был задан ранее, и это может проделать через API Codeedom.Смотрите Это и Это .Обратите внимание, что эти ключевые слова (INT, BOOL и т. Д.) являются специфическими языком, поэтому, если вы выводят это для общего потребления .NET потребителя, которые обычно предпочтительны имена структурных типов.
Другие советы
Насколько я знаю, нет ничего встроенного, что могло бы преобразовать настоящий введите имя примитива (System.Int32
) на встроенный псевдоним (int
).Поскольку таких псевдонимов очень мало, написать собственный метод не так уж и сложно:
public static string GetTypeName(Type type)
{
if (type == typeof(int)) // Or "type == typeof(System.Int32)" -- same either way
return "int";
else if (type == typeof(long))
return "long";
...
else
return type.Name; // Or "type.FullName" -- not sure if you want the namespace
}
При этом, если пользователь действительно делал введите System.Int32
скорее, чем int
(что, конечно, было бы совершенно законно) этот метод все равно выведет «int».Вы мало что можете с этим поделать, потому что System.Type
в любом случае одинаково, поэтому у вас нет возможности узнать, какой вариант на самом деле набрал пользователь.