C#创建泛型对象实例

using System;
using System.Collections.Specialized;
using System.Reflection;
using System.Web;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Person person = CreateInstance<Person>("name=dnawo&age=20&birthday=2014-07-23");
            Console.WriteLine("{0},{1},{2}", person.Name, person.Age, person.Birthday);

            Console.ReadKey();
        }

        /// <summary>
        /// 创建泛型实例
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="data"></param>
        /// <returns></returns>
        static T CreateInstance<T>(string data) where T : class
        {
            T result = Activator.CreateInstance<T>();
            NameValueCollection nv = HttpUtility.ParseQueryString(data);
            PropertyInfo[] properties = typeof(T).GetProperties();
            foreach (PropertyInfo prop in properties)
            {
                string name = prop.PropertyType.Name;
                string value = nv[prop.Name];
                if (value != null)
                {
                    if (name == typeof(string).Name)
                    {
                        prop.SetValue(result, value, null);
                    }
                    else if (name == typeof(int).Name)
                    {
                        prop.SetValue(result, int.Parse(value), null);
                    }
                    else if (name == typeof(DateTime).Name)
                    {
                        prop.SetValue(result, DateTime.Parse(value), null);
                    }
                }
            }
            return result;
        }
    }

    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public DateTime Birthday { get; set; }
    }
}



评论: 0 | 引用: 0 | 查看次数: 3595
发表评论
登录后再发表评论!