Compiler Error CS0312

The type 'type1' cannot be used as type parameter 'name' in the generic type or method 'name'. The nullable type 'type1' does not satisfy the constraint of 'type2'.

A nullable type is distinct from its non-nullable counterpart; no implicit reference conversion or identify conversion exists between them. A nullable boxing conversion does not satisfy a generic type constraint. In the example that follows, the first type parameter is a Nullable<int> and the second type parameter is a System.Int32.

To correct this error

  1. Remove the constraint.

  2. In the following example, make the second type argument either int? or object.

Example

The following code generates CS0312:

// cs0312.cs
class Program
{
    static void MTyVar<T, U>() where T : U { }

    static int Main()
    {
        MTyVar<int?, int>(); // CS0312
        return 1;
    }
}

Although a nullable type is distinct from a non-nullable type, various kinds of conversions are allowed between nullable and non-nullable values.

See Also

Reference

Nullable Types (C# Programming Guide)