C# Generic Type Inference With Multiple Types
.net, c#, generics
Solution
My question is, why can't TInput be inferred in this situation?
It can - it's `TResult` which can't be inferred, and there's no way of specifying "partial" inference.
What you can sometimes do is separate the type parameters into ones for a generic type and ones for a generic method, so you'd end up with:
// Explicitly state TResult, and infer TInput
Serializer<MySuperType>.Serialize(x);
Problem
I have the following generic method for serialising an input object of one type as a super-type as follows: ``` public string SerialiseAs<TResult, TInput>(TInput input) where TInput : TResult { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(TResult)); MemoryStream stream = new MemoryStream(); ser.WriteObject(stream, input); stream.Position = 0; StreamReader reader = new StreamReader(stream); return reader.ReadToEnd(); } ``` I have to call this method specifying both generic types as follows: ``` MySubType x = new MySubType(); string json = SerialiseAs<MySuperType, MySubType>(x); ``` My question is, why can't `TInput` be inferred in this situation? Is it because `TResult` isn't actually used as the return type? The following code is cleaner but won't compile because of the missing input type: ``` MySubType x = new MySubType(); string json = SerialiseAs<MySuperType>(x); ```