C# Generics: Constraining T where T : Object doesn't compile; Error: Constraint cannot be special class 'object'

前端 未结 3 1085
孤独总比滥情好
孤独总比滥情好 2021-01-03 21:44

When I constrain T with : Object like this:

public interface IDoWork where T : Object
{
    T DoWork();
}

I get the error:

3条回答
  •  死守一世寂寞
    2021-01-03 22:33

    As per C# 4.0 Language Specification (Coded : [10.1.5] Type parameter constraints) tells two things:

    1] The type must not be object. Because all types derive from object, such a constraint would have no effect if it were permitted.

    2] If T has no primary constraints or type parameter constraints, its effective base class is object.

    When you define a generic class, you can apply restrictions to the kinds of types that client code can use for type arguments when it instantiates your class. If client code tries to instantiate your class by using a type that is not allowed by a constraint, the result is a compile-time error. These restrictions are called constraints. Constraints are specified by using the where contextual keyword. If you want to constrain a generic type to be a reference type, use : class.

    According to MSDN

    Constraint cannot be special class 'identifier'. The following types may not be used as constraints:

    • System.Object
    • System.Array
    • System.Delegate
    • System.Enum
    • System.ValueType.

提交回复
热议问题