I can report that using Sitecore with .NET 3.5 and C# 3.0 truly is a seamless transition.
This is especially good news for us developers who tried to upgrade from .NET 1.1 to .NET 2.0.
Back in the day, the transition supposed to be seamless, but surely was not. There was always some strange library containing some braking change, or a project model
who was removed - only to make life difficult for us developers.
This is by my experience NOT the case when upgrading from .NET 2.0 to 3.5.
I have been running a production environment of Sitecore in .NET 3.5 for a couple of weeks now (since we
Microsoft Gold Partners got VS2008) – and there have been no problems so far.
But why is that?
Well:
– There has been no change what so ever in the CLR runtime. It’s still 2.0. This was not the case coming from 1.1 to 2.0. MS had to update the CLR to include generics (parametric polymorphism)
– The C# Compiler has changed, but the target of the compiler remains.
– The library changes are purely additive. Meaning, that things you used in
.NET 2.0 remain the same - and all the new features have been added in new
.dlls, not changing the old ones.
So - Happy coding using C# 3.0 for Sitecore.
To finnish of, lets reflect on the different way to bind children of an Item to a repeater control in Sitecore:
(Wich one do you like the most ?)
//The sitecore way
childrenRepeater.DataSource = Context.Database.SelectItems("/sitecore/content/home/*[@@templatename='DisplayBox']");
//C# 1.0 way, using a standard foreach loop
ArrayList list = new ArrayList();
foreach (Item item in Sitecore.Context.Item.Children) {
if (item.TemplateName == "DisplayBox")
list.Add(item);
}
childrenRepeater.DataSource = list;
//C# 2.0 way, using the iterator pattern (yield statement),and anonomouse delegate
childrenrepeater.DataSource = delegate {
foreach (Item child in Sitecore.Context.Item.Children) {
if (child.TemplateName == "DisplayBox")
yield return child;
}
};
//C# 3.0 way using the query syntax
childrenRepeater.DataSource = from Item child in Sitecore.Context.Item.Children
where child.TemplateName =="DisplayBox"
select child;
childrenRepeater.DataBind();