c # как использовать шаблон в свойстве get? - PullRequest
2 голосов
/ 07 ноября 2019

У меня возникла проблема с использованием шаблона в свойстве get в c #. Следующий класс не имеет проблем:

public class test
{
    public T GetDefault<T>()
    {
        return default(T);
    }
}

Но я хотел бы использовать свойство get, а затем возникает ошибка

неожиданное использование родового имени

код следующий:

public class test
{
    public T Default<T> => default<T>;
}

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Пока нет общих свойств в C #. Вы можете найти подробности здесь и здесь :

Мы должны зарезервировать место для резервного хранилища для универсального свойства [...]. Но мы не знаем, сколько зарезервировать. Даже если компилятор прочитал и понял все возможные варианты использования универсального.

Состояния MSDN здесь :

Свойства являются естественным расширением полей,Оба являются именованными членами со связанными типами.

Они должны иметь связанный тип во время компиляции.

1 голос
/ 07 ноября 2019

Я не думаю, что текущая версия C # поддерживает такой синтаксис сахара. Но вы можете получить похожее поведение, подобное этому:

public static class test<T>
{
    public static T Default => default(T);
}

И затем использовать его:

var value = test<int>.Default;

На самом деле, если вы боретесь между двумя, я бы порекомендовал остановиться на методах:

public static class test
{
    public static T GetDefault<T>() => default(T);
}

Преимущество заключается в том, что вы можете помещать разные расширения в один и тот же класс тестирования для разных типов.

...