XML to Windows.Forms.Keys List
Sticking with the approach you used how about this as an alternative.

public override void Load(string elementText)
    {
        var ele = XElement.Parse(elementText);

        var xElement = ele.Element("FunctionKeys");
        if (xElement != null &amp;&amp; xElement.HasElements)
        {
            _dliUnit.FunctionKeyList.AddRange(xElement
                               .Descendants("Name")
                               .Select(x =&gt; EnumHelper.GetEnum&lt;Keys&gt;(x.Value))
                );
        }
    }


I created a little Enum Extensions class just because I like typing GetEnum:

public static class EnumHelper
{
    public static T GetEnum&lt;T&gt;(string name)
    {
        if (IsValidEnumFor&lt;T&gt;(name))
            return (T)Enum.Parse(typeof(T), name);
        else
            throw new ArgumentException(typeof(T) + "does not contain a value member = " + name);
    }

    public static T GetEnum&lt;T&gt;(int number)
    {
        if (Enum.IsDefined(typeof(T), number))
        {
            return (T)Enum.ToObject(typeof(T), number);
        }
        else
        {
            throw new ArgumentException(typeof(T) + "does not contain a value member = " + number.ToString());
        }
    }

    public static bool IsValidEnumFor&lt;T&gt;(string name)
    {
        return Enum.IsDefined(typeof(T), name);
    }
}


Alternative - XmlSerializer

One alternative I have used in the past to parse Xml into objects is the .NET XmlSerializer.  In your case you might do something like:

StringReader sr = new StringReader(xml);

// Create an XmlSerializer object to perform the deserialization
XmlSerializer xs = new XmlSerializer(typeof(DLIUnit));
return (DLIUnit)xs.Deserialize(sr);


This may not work for you but I would recommend having a look into this class as it is fairly easy to use once you get going.  Once I got my head around the basics it helped immensely.