Ответ 1
Невозможно создать лямбда-выражение, которое имеет новые общие параметры. Вы можете повторно использовать общие параметры для содержащихся методов или типов, но не создавать новые.
У меня есть некоторая логика в методе, который работает с указанным типом, и я хотел бы создать общую лямбду, которая инкапсулирует логику. Это дух того, что я пытаюсь сделать:
public void DoSomething()
{
// ...
Func<T> GetTypeName = () => T.GetType().Name;
GetTypeName<string>();
GetTypeName<DateTime>();
GetTypeName<int>();
// ...
}
Я знаю, что могу передать тип в качестве параметра или создать общий метод, но мне интересно, может ли это быть просто обобщенная лямбда (так что я не ищу альтернативы). Из того, что я могу сказать, С# 3.0 не поддерживает это.
ТИА,
т
Невозможно создать лямбда-выражение, которое имеет новые общие параметры. Вы можете повторно использовать общие параметры для содержащихся методов или типов, но не создавать новые.
Пока вы не можете (пока?) иметь общую лямбду (см. также этот ответ и один комментарий к этому вопросу), вы можете получить тот же синтаксис использования. Если вы определяете:
public static class TypeNameGetter
{
public static string GetTypeName<T>()
{
return typeof( T ).Name;
}
}
Вы можете использовать его (хотя using static
- С# 6):
using static TypeNameGetter;
public class Test
{
public void Test1()
{
var s1 = GetTypeName<int>();
var s2 = GetTypeName<string>();
}
}
Это возможно, только если ваш метод DoSomething
является общим или его класс является общим.