/// <summary>
        /// 获取集合中具有指定键的项的T类型值(注:T类型应与defaultValue类型相同)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="collection"></param>
        /// <param name="key"></param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static T GetEnum <T>(this NameValueCollection collection, string key, Enum defaultValue) where T : struct
        {
            Type tType = typeof(T);

            //判断类型条件是否成立
            if (tType != defaultValue.GetType())
            {
                throw new Exception("T must be the same type with param defaultValue.");
            }
            int emValue = GetInt(collection, key, defaultValue.GetValue());

            if (defaultValue.ContainsKey(emValue))
            {
                return((T)Enum.Parse(tType, emValue.ToString()));
            }
            else
            {
                return((T)Convert.ChangeType(defaultValue, tType));
            }
        }