c# - 使用反射从类创建数据表?

标签 c# .net oop reflection

我刚刚了解了泛型,我想知道我是否可以使用它从我的类中动态构建数据表。

或者我可能忽略了这里的重点。 这是我的代码,我要做的是从我现有的类创建一个数据表并填充它。然而,我陷入了思考过程。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Data;

namespace Generics
{
    public class Dog
    {
        public string Breed { get; set; }
        public string Name { get; set; }
        public int legs { get; set; }
        public bool tail { get; set; }
    }

    class Program
    {
        public static DataTable CreateDataTable(Type animaltype)
        {
            DataTable return_Datatable = new DataTable();
            foreach (PropertyInfo info in animaltype.GetProperties())
            {
                return_Datatable.Columns.Add(new DataColumn(info.Name, info.PropertyType));
            }
            return return_Datatable;
        }

        static void Main(string[] args)
        {
            Dog Killer = new Dog();
            Killer.Breed = "Maltese Poodle";
            Killer.legs = 3;
            Killer.tail = false;
            Killer.Name = "Killer";

            DataTable dogTable = new DataTable();
            dogTable = CreateDataTable(Dog);
//How do I continue from here?


        }      
    }
}    

现在在 DataTable 点它出错了。 另外,作为反射和泛型的新手,我将如何使用 Killer 类实际填充数据?

最佳答案

在之前所有答案的基础上,这里有一个从任何集合创建 DataTable 的版本:

public static DataTable CreateDataTable<T>(IEnumerable<T> list)
{
    Type type = typeof(T);
    var properties = type.GetProperties();      
    
    DataTable dataTable = new DataTable();
    dataTable.TableName = typeof(T).FullName;
    foreach (PropertyInfo info in properties)
    {
        dataTable.Columns.Add(new DataColumn(info.Name, Nullable.GetUnderlyingType(info.PropertyType) ?? info.PropertyType));
    }
    
    foreach (T entity in list)
    {
        object[] values = new object[properties.Length];
        for (int i = 0; i < properties.Length; i++)
        {
            values[i] = properties[i].GetValue(entity);
        }
        
        dataTable.Rows.Add(values);
    }
    
    return dataTable;
}

关于c# - 使用反射从类创建数据表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18746064/

相关文章:

javascript - OOP Javascript,获取类的属性而不是事件 e

javascript - 将值从 QueryString 传递到 asp.net mvc 中 Controller 的 Index 操作

.net - 当访问间隔时间很长时,使 ASP.NET IIS 网站保持响应

c# - 类 CSS3 框阴影实现/算法

python - 当我使用 dir([user-defined object]) 时,为什么它还会返回对象父类的命名空间中的名称?

java - 如何对对象层次结构中的级联设置进行建模

c# - SpreadsheetLight 的行数

c# - 用字符串路径绑定(bind)背景

c# - 浏览器关闭时的 Session_End 代码

C# - 从 TCP 连接读取时一些数据包被丢弃