What does where T : somevalue mean? I just saw some code that said where T : Attribute. I think this has something to do with generics but I am not sur
It is a constraint on a type parameter, meaning that the type T given to a generic class or method must inherit from the class Attribute
For example:
public class Foo :
where T : Attribute
{
public string GetTypeId(T attr) { return attr.TypeId.ToString(); }
// ..
}
Foo bar; // OK, DescriptionAttribute inherits Attribute
Foo baz; // Compiler error, int does not inherit Attribute
This is useful, because it allows the generic class to do things with objects of type T with the knowledge that anything that is a T must also be an Attribute.
In the example above, it's okay for GetTypeId to query the TypeId of attr because TypeId is a property of an Attribute, and because attr is a T it must be a type that inherits from Attribute.
Constraints can also be used on generic methods, with the same effect:
public static void GetTypeId(T attr) where T : Attribute
{
return attr.TypeId.ToString();
}
There are other constraints you can place on a type; from MSDN:
where T: structThe type argument must be a value type. Any value type except Nullable can be specified.
where T : classThe type argument must be a reference type; this applies also to any class, interface, delegate, or array type.
where T : new()The type argument must have a public parameterless constructor. When used together with other constraints, the new() constraint must be specified last.
where T :The type argument must be or derive from the specified base class.
where T :The type argument must be or implement the specified interface. Multiple interface constraints can be specified. The constraining interface can also be generic.
where T : UThe type argument supplied for T must be or derive from the argument supplied for U. This is called a naked type constraint.