木子屋 Dnawo's BLOG

C#创建泛型对象实例

👤 dnawo 📅 2014-07-23 👁 4383 👍 0 💬 0 🔄 来源:本站原创
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)

暂无评论。

验证码
评论需审核通过后显示
← 上一篇 WinForm窗体属性默认值修改示例 下一篇 → KeyDown、KeyUp和KeyPress三个事件区别