C# nameof generic type without specifying type

Thomas Flinkow picture Thomas Flinkow · Apr 18, 2018 · Viewed 17.3k times · Source

Assume I have the type

public class A<T> { }

and somewhere in the code I want to throw an exception related to incorrect usage of that type:

throw new InvalidOperationException("Cannot use A<T> like that.");

So far, so good, but I don't want to hardcode the classes name, so I thought I could maybe use

throw new InvalidOperationException($"Cannot use {nameof(A<T>)} like that.");

instead, but in this context I don't know the exact type T. So I thought maybe I could do it with template specialization like in C++:

throw new InvalidOperationException($"Cannot use {nameof(A)} like that.");

or

throw new InvalidOperationException($"Cannot use {nameof(A<>)} like that.");

but those yield

Incorrect number of type parameters.

and

Type argument is missing.


I absolutely don't want to hardcode the classes name for it might change later. How can I get the name of the class, preferably via nameof?

Optimally, what I want to achieve is "Cannot use A<T> like that." or "Cannot use A like that.".

Answer

PachecoDt picture PachecoDt · Apr 18, 2018

Have you tried:

typeof(T).FullName;

or

t.GetType().FullName;

Hope it works for you.