C# type inference
While I work mainly in a Java shop, I continue to be impressed by what Anders Hejlsberg, chief architect of C#, brings to the table to a language which in my mind has always represented Java done right. I do wonder however, how come they did not take the concept of type inference just a little bit further.
Local variable type inference
This feature of C# 3.0 basically allows you to omit the declaration which, especially when generics is involved, causes a lot of repetition and long lines of code:
Which can be reduced to this:
No late binding is taking place, the compiler simply infers the actual type and substitutes var with it.
No method return type inference?
Some languages operates with the concept of tuples, a way of returning multiple values without having to wrap them in an array and use casting or a predefined data transfer object. Wouldn't it be nice, if we could use type inference here instead to be able to return multiple values from one invocation - and still be type-safe about the whole thing:
Perhaps this isn't doable for reasons of method signature lookup or polymorphism rules, I don't know. But it strikes me as something that would be very usefull and further reduce the need of temporary housekeeping objects.
Local variable type inference
This feature of C# 3.0 basically allows you to omit the declaration which, especially when generics is involved, causes a lot of repetition and long lines of code:
Dictionary<int, IEnumerable<decimal>> myCollection =
new Dictionary<int, IEnumerable<decimal>>();
Which can be reduced to this:
var myCollection = new Dictionary<int, IEnumerable<decimal>>();
No late binding is taking place, the compiler simply infers the actual type and substitutes var with it.
No method return type inference?
Some languages operates with the concept of tuples, a way of returning multiple values without having to wrap them in an array and use casting or a predefined data transfer object. Wouldn't it be nice, if we could use type inference here instead to be able to return multiple values from one invocation - and still be type-safe about the whole thing:
var getInferredType()
{
return new {X = 22, Y = -3};
}
var coordinate = getInferredType();
Console.WriteLine(coordinate.X);
Console.WriteLine(coordinate.Y);
Perhaps this isn't doable for reasons of method signature lookup or polymorphism rules, I don't know. But it strikes me as something that would be very usefull and further reduce the need of temporary housekeeping objects.
Comments