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

前端 未结 3 1083
孤独总比滥情好
孤独总比滥情好 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:31

    There is no difference between the two constraints, except for that one is disallowed for being useless to explicitly state.

    The C# 4.0 language specification (10.1.5 Type parameter constraints) says two things about this:

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

    ...

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

    In your comment, you said that you were trying to make T be of type Void. Void is a special type that indicates that there is no return type and cannot be used in place of T, which requires an appropriate concrete type. You will have to create a void version of your method and a T version if you want both.

提交回复
热议问题