When I constrain T with : Object like this:
public interface IDoWork where T : Object
{
T DoWork();
}
I get the error:
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.