加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用FastMember将不同的对象列表转换为DataTable

发布时间:2020-12-15 05:40:52 所属栏目:百科 来源:网络整理
导读:我编写了一个方法,使用NuGet中的 FastMember将通用列表转换为DataTable. 这是我的代码: public DataTable ConvertGenericListToDataTable(ListCustomObject inputList){ var dt = new DataTable(); using (var reader = ObjectReader.Create(inputList)) {
我编写了一个方法,使用NuGet中的 FastMember将通用列表转换为DataTable.

这是我的代码:

public  DataTable ConvertGenericListToDataTable(List<CustomObject> inputList)
{
    var dt = new DataTable();
    using (var reader = ObjectReader.Create(inputList))
    {
         dt.Load(reader);
    }
    return dt;
}


var customObject = new List<CustomObject>();
var dt = ListToDataTable.ConvertGenericListToDataTable(customObject);

哪个工作正常.
Customobject是我创建的自定义对象,我有几个不同的列表,我想传递给我的方法:List< CustomobjectA>或列表< CustomobjectB>等等.
为我想要转换为DataTable的每种类型的列表编写方法并不是一个问题,但这可能会一遍又一遍地重复相同的代码行,这显然是我想要防止的

我尝试将参数的类型更改为List< object>和列表< dynamic>.
然后我的代码将无法编译,因为:“ConvertGenericListToDataTable的最佳重载方法匹配有一些无效的参数”.

有没有办法可以将对象列表作为参数传递而不定义对象的确切类型?

解决方法

为’CustomObject’创建一个接口,它定义了必须是实现’CustomObject’接口的类的一部分的方法和属性.然后确保’CustomObjectA’和’CustomObjectB’继承’CustomObject’接口,在’CustomObjectA’和’CustomObjectB’中执行所有必需的实现.

要使’ConvertGenericListToDataTable’方法接受任何’CustomObject’,只需让它接受任何实现’CustomObject’接口的类.

这样,您可以确保列表中提供的对象具有所需的方法和属性.

我可能会弄错语法,但是这样的话:

interface ICustomObject
{
    public string RequiredProperty { get; }

    public void RequiredMethod();
}

public class CustomObjectA : ICustomObject
{
    public string RequiredProperty
    {
        get
        {
            return "I'm CustomObjectA";
        }
    }

    public void RequiredMethod()
    {
        // do anything
    }
}

public class CustomObjectB : ICustomObject
{
    public string RequiredProperty
    {
        get
        {
            return "I'm CustomObjectB";
        }
    }

    public void RequiredMethod()
    {
        // do anything
    }
}

public void AcceptsAllCustomObjects(List<ICustomObject> Cookies)
{
    Console.WriteLine(Cookies[0].RequiredProperty);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读