So I caugh this the other day and I’m not really sure it’s useful but it got me thinking…
Say you have a string and you want to create what ReSharper calls a “implicitly typed local variable declaration”, or as most people know it as “var”, and intialize it with a created value:
String someThing = "hi"; var onTheFly = new { someThing };
And now you can do this:
String somethingElse = ontTheFly.something;
What it basically did was not only take the value of the string, but the name too and made a property on the var. In fact you may have seen this already with Linq:
var hi = from item in test select new {item.UserRole}; UserRole someRole = hi.ToList()[0].UserRole;
So what does this all mean? Right now, I’m not really sure. I suppose if you have a method that you want to combine a bunch of value/objects into one var so you don’t have to keep refering to 8 different objects that might work:
//Get the user User user = new User (1); //Get some icecream... couldn't think of any better fake class name IceCream iceCream = new IceCream(1); var stuff = new { user.UserName, user.UserRoles, user.UserLastName, iceCream.Flavor, iceCream.Texture }; //IMAGINARY CODE GOES HERE //MORE IMAGINARY CODE //?? //PROFIT if(stuff.UserName.Equals("Sean", StringComparison.OrdinalIgnoreCase) && stuff.Flavor == IceCreamFlavor.Chocolate) { //BLAH BLAH BLAH }
As you can see, it could be a way to group together a bunch of things in a method, but I’m not sure that is really useful.
*WARNING THIS IS NOT TO BE TAKEN AS FACT, JUST MUSINGS OF AN IDIOT*
Now for the theory… As is, this isn’t useful but with 4.0 that might change with Duck Typing and dynamic types. Why? Well take a method like this:
CallMe(userName, userFirstName, userLastName, userAddress, thisIsStupid, makeItEnd, iNeedAnAdult... endMe);
Now that’s a lot of parameters. Conventional wisdom says I should create a new class whose properties match the parameters I would be sending in and just send in that class:
parameterClass.UserName = userName; parameterClass.UserFirstName = firstName; ..... CallMe(parameterClass);
Now the only annoying thing is having to make the class to do this. What if dynamic types + duck typing takes that step away?
var parameter = new { userName, userFirstName, userLastName .... }; CallMe(parameter);
Then CallMe would take in a dynamic type and just look to see if it has the needed properties. Would be nice if this is possible but I haven’t used 4.0 yet to know, I’m only guessing from what I’ve read.