Take these two classes:
class NonGenericClass
{
public string Member { get; set; }
}
class GenericClass<T>
{
public string Member { get; set; }
}
I can easily do this:
nameof(NonGenericClass.Member)
But I can't do this:
nameof(GenericClass.Member)
I could do this:
nameof(GenericClass<object>.Member)
But I don't want to.
Is there a way to do what I want without having to resort doing it in a way that I don't want to?
No, there's no way of using
nameoffor a generic type (or a member of that generic type) without specifying a type argument. I would personally like to be able to specify the open type as you can withtypeof, i.e.... which would allow distinction between different generic types with different arities in the same way (
GenericClass<,>,GenericClass<,,>etc) but that just isn't valid at the moment. There's already a feature request for this which has some support, but it certainly won't be in C# 7, and I'd be surprised if it got in before C# 8 at best.I suggest you just hold your nose and use
GenericClass<int>.Memberor similar. Any change that makes that break is likely to make far worse problems than this. If you're consistent about the type argument you use, a simple search and replace should fix it.