Search code examples
c#c#-6.0nameof

Can C# nameof operator reference instance property without instance?


I regularly want to get the name of an instance property of a type, when I have no instance. Currently to do this, I use the following inhouse function which interprets the Expression[Func[T, object]] parameter and returns the property name:

var str = LinqExtensions.NameOf<ClientService>(x => x.EndDate);
// Now str == "EndDate"

However it seems a shame not to use the built in nameof operator.

Unfortunately it seems that the nameof operator requires either an instance, or, to reference a static properties.

Is there a neat way to use the nameof operator instead of our in house function? For example:

nameof(ClientService.EndDate) // ClientService.EndDate not normally syntactically valid as EndDate is instance member

EDIT

I was completely wrong, the syntax nameof(ClientService.EndDate) as described actually works as is.


Solution

  • In the past, the documentation explicitly explained this, reading in part:

    In the examples you see that you can use a type name and access an instance method name. You do not need to have an instance of the type[emphasis mine]

    This has been omitted in the current documentation. However, the examples still make this clear. Code samples such as Console.WriteLine(nameof(List<int>.Count)); // output: Count and Console.WriteLine(nameof(List<int>.Add)); // output: Add show how to use nameof to obtain the string value with the name of an instance member of a class.

    I.e. you should be able to write nameof(ClientService.EndDate) and have it work, contrary to your observation in the question that this would be "not normally syntactically valid".