Нет, оператор C # не может ссылаться на элементы безопасным для типов способом, подобным этому.Это функция, которая часто запрашивается, но действительно трудно хорошо спроектировать .Оператор nameof
, представленный в C # 6, позволяет обойти большинство проблем проектирования, удовлетворяя при этом большинство вариантов использования.
Даже если предполагаемый оператор infoof
сделал существует, маловероятно, что существует способ доступа к определенным свойствам из него (например, к имени возвращаемого типа свойства) во время компиляции.
Если важна часть "времени компиляции"вам ради безопасности , а не для того, чтобы реально оценить имя во время компиляции, есть способы, которые могут сработать.Например:
public static class TypeHelpers<TInput>
{
public static Type GetReturnType<TOutput>(Func<TInput, TOutput> func) =>
typeof(TOutput);
}
Тогда:
Type returnType = TypeHelpers<IFoo>.GetReturnType(foo => foo.X);
Console.WriteLine(returnType.FullName); // System.Int32
Это было бы лучше, чем найти член во время выполнения, но он все еще запрашивает имя типаво время исполнения.