Question: I have a generic class with a complex signature that I would like to simplify for convenience if all of the type parameters will be the same.

```
MyClass<T1, T2, T3, T4>

```

If all of the type parameters are Guid, I'd like to supply just one type parameter, the only way I can think of doing it would be to have another class defined.

```
MyClass<T1> : MyClass<T1, T1, T1, T1>

```

Is there a better method of achieving this functionality? Ultimately, I don't want there to be anything different between the classes other than the ability to use a simplified signature.

Answer: 
Unfortunately, there is generally no way for the compiler to infer generic type parameters based on other generic type parameters. Therefore, you either have to specify all or nothing. If you refer to a class, you always have to specify all type parameters.

However, the compiler may have a chance to infer generic type parameters of methods from the passed parameters, so what you can do is something like

```
public MyClass<T, T, T, T> CreateMyClass<T>(T item)

```

If you provide an API like that so users don't have to rely on constructors, you may have a chance to keep explicit type parameters to a bare minimum.
No. This is the only way. As far as the compiler is concerned, `T1`, `T2`, `T3` and `T4` are unrelated.