У меня есть следующий класс
public abstract class Result<TResult, TData> where TResult : Result<TResult, TData>
{
public virtual TData Data { get; private set; }
}
Как я могу использовать nameof для свойства Data?
Он пробовал некоторые варианты, но получил ошибки компиляции
nameof(Result<object, object>.Data)
Error CS0311
The type 'object' cannot be used as type parameter 'TResult' in the generic type or method
'Result<TResult, TData>'. There is no implicit reference conversion from 'object' to
'Result<object, object>'
ОБНОВЛЕНИЕ Чтобы уточнить:
Я не писал класс в первом фрагменте, но я должен использовать его как есть. Мне нужно использовать отражение, чтобы получить экземпляр PropertyInfo для свойства Data. Я могу сделать это, вызвав GetProperty(Data), но я предпочитаю избегать строк, если свойство name переименовывается с помощью рефакторинга Visual Studio (например, из Data в Content). Я не могу использовать nameof(Data) и нахожусь в другом контексте, который не знает о свойстве Data в этом классе.
Таким образом, я бы назвал GetProperty(nameof({whatever}.Data)). Конечно, если бы это было невозможно, я бы использовал строку. Но если есть способ, я хотел бы знать его.
where
в универсальном типе ограничиваетTResult
доResult<TResult, TData>
. Типobject
не соответствует этому ограничению - person Flydog57   schedule 18.09.2020public class Foo : Result<Foo, object> { }
. Вы можете без проблем создать экземплярFoo
. - person Enigmativity   schedule 18.09.2020