/// <summary>
        /// Parses a HierarchyPath instance from its string representation.
        /// Type of the path items is specified by the type parameter.
        /// </summary>
        /// <typeparam name="T">type of the path items after conversion</typeparam>
        /// <param name="path">string representation to parse</param>
        /// <param name="convertPathItem">conversion delegate applied to a single parsed path item</param>
        /// <param name="separator">seperator character between the path items in the string representation</param>
        /// <returns></returns>
        public static HierarchyPath <T> Parse <T>(string path, Func <string, T> convertPathItem, string separator = null)
        {
            string separatorSafe = separator ?? "\\";

            return(HierarchyPath.Create <T>(path.Split(separatorSafe.ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Select(p => convertPathItem(p))));
        }
 /// <summary>
 /// Parses a HierarchyPath instance from its string representation. Type of the path items is a string by default.
 /// </summary>
 /// <param name="path">string representation of the HierarchyPath</param>
 /// <param name="separator">Separator betweeen the path items in the string representation</param>
 /// <returns></returns>
 public static HierarchyPath <string> Parse(string path, string separator)
 {
     return(HierarchyPath.Create(path.Split(separator.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)));
 }