Подтвердить что ты не робот

Можно ли определить общую лямбду?

У меня есть некоторая логика в методе, который работает с указанным типом, и я хотел бы создать общую лямбду, которая инкапсулирует логику. Это дух того, что я пытаюсь сделать:

public void DoSomething()
{
    // ...

    Func<T> GetTypeName = () => T.GetType().Name;

    GetTypeName<string>();
    GetTypeName<DateTime>();
    GetTypeName<int>();

    // ...
}

Я знаю, что могу передать тип в качестве параметра или создать общий метод, но мне интересно, может ли это быть просто обобщенная лямбда (так что я не ищу альтернативы). Из того, что я могу сказать, С# 3.0 не поддерживает это.

ТИА,

т

4b9b3361

Ответ 1

Невозможно создать лямбда-выражение, которое имеет новые общие параметры. Вы можете повторно использовать общие параметры для содержащихся методов или типов, но не создавать новые.

Ответ 2

Пока вы не можете (пока?) иметь общую лямбду (см. также этот ответ и один комментарий к этому вопросу), вы можете получить тот же синтаксис использования. Если вы определяете:

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>();
    }
}

Ответ 3

Это возможно, только если ваш метод DoSomething является общим или его класс является общим.