2016-05-12 2 views
0
public static string GetFuncName<T1, T2>(Func<T1, T2> func){ 
    return func.Method.Name; 
} 

Я использую этот код может получить «string function(string)» имя методы структуры.я не могу получить C# метод имени, FUNC <T1,T2>

Но я не могу получить «void function()» структура метод имя.

"GetFuncName (xxx)" выдает ошибку воли.

Мне нужно получить имя «void function()».

+0

Какая ошибка возникает у вас? –

+0

Если вам нужна функция вызова, например: var demo = GetFuncName (новый Func <Страна, строка> (x => x.CountryName)); –

ответ

1

Для пустоты вам понадобится делегат Action<>, а не делегат Func.

Таким образом, вы будете нуждаться в другом методе

public static string GetActionName<T1>(Action<T1> action){ 
    return action.Method.Name; 
} 
+0

Большое спасибо. Мне нужно найти вторжение. Он работает хорошо. Теперь я могу использовать «CancelInvoke (GetFuncName (actionCancelShaking)); и "Invoke (GetFuncName (actionCancelShaking), .05f);" вместо имени функции. Сильный код. – zszen

+0

Я определяю две «общедоступные статические строки GetFuncName (Действие действие)» и «общедоступная статическая строка GetFuncName (действие) – zszen

0

Вы всегда можете получить имя методы с помощью Delegate.Method.Name. ИМО ваш метод не обязательно должен быть общим.

public static string GetDelegateName(Delegate instance) 
{ 
    return instance.Method.Name; 
}