Recently I have read a term "naked type constraint" in the context of Generics.What does it mean? Where do we use it?
"When a generic type parameter is used as a constraint, it is called a naked type constraint. Naked type constraints are useful when a member function with its own type parameter has to constrain that parameter to the type parameter of the containing type"
From MSDN:
Constraint Description where T : U The type argument supplied for T must be or derive from the argument supplied for U. This is called a naked type constraint.
When a generic type parameter is used as a constraint, it is called a naked type constraint. Naked type constraints are useful when a member function with its own type parameter has to constrain that parameter to the type parameter of the containing type, as shown in the following example:
class List<T>
{
void Add<U>(List<U> items) where U : T {/*...*/}
}
As an aside, it is bizarre to me that this somewhat salacious term managed to make it into the MSDN documentation. We certainly do not call these constraints "naked type constraints" on the C# compiler team and I was shocked, shocked! to discover a few years back that this is what the documentation said. We usually call them "type parameter constraints". I have no idea how this term got into the documentation in the first place; there's probably an interesting story there.