It is already implemented in .NET 4 😉 Take a look here.
MyEnum cal;
if (!Enum.TryParse<MyEnum>("value1", out cal))
throw new Exception("value1 is not valid member of enumeration MyEnum");
Also the discussion here contains some interesting points.