C# имя дженериков с ограничениями на тип - PullRequest
1 голос
/ 07 мая 2020

Данный класс:

public interface ITest
{
    DateTime DataIns { get; set; }
}

И данный класс:

 public abstract class ATest<T> where T : class, ITest
 {
    public void Test() {

          // I would like to do this:
         // var field = nameof(T.DataIns);
    }
 }

Невозможно ли получить свойство интерфейса nameof без использования самого интерфейса? Я знаю, что это, конечно, возможно var field = nameof(IMetrics.DataIns);, но я хотел бы сослаться на тип дженериков.

1 Ответ

0 голосов
/ 07 мая 2020

Похоже, это маловероятно: https://github.com/dotnet/csharplang/issues/810

Вы можете немного обмануть и go с помощью чего-то, что генерирует символ T, поскольку nameof - это конструкция времени компиляции. В некотором смысле это лучше, чем кодирование в соответствии с интерфейсом, поскольку при компиляции он делает все правильно, однако это больше вопрос мнения.

public abstract class ATest<T> where T : class, ITest
{
    public void Test()
    {
        var field = nameof(THack.DataIns);
    }

    static T THack => throw new NotImplementedException();
}

Учитывая, что это можно сделать, это немного глупо, что вы не можете использовать T напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...