首页 > 解决方案 > 如何创建一个采用映射的通用列表和字符串参数的方法?

问题描述

我现在有这个 C# 工作代码。

using (var bulk = new SqlBulkCopy(_connectionString))
{
    bulk.DestinationTableName = "Person";
    bulk.WriteToServer(DataTableHelper.ToDataTable(persons));
}

问题是上面的代码只适用于一个表和一个列表对象。但是我还有 3 个不同的表和不同的列表,它们使用上面的相同代码。

例子

表名 列表对象
地址 地址
接触 接触

我没有将代码复制 3 次,而是创建了一个带有参数的方法。

我如何使用元组、字典或泛型来实现这一点,因为只有两个值并且需要映射?

我尝试了类似下面的方法,但语法无效。

var dict = new Dictionary<string, List<T>>();
dict.Add("Person", persons);
dict.Add("Address", address);
dict.Add("Contact", contact);

标签: c#

解决方案


假设DataTableHelper.ToDataTable()可以处理Person//列表AddressContact一种方法是创建一个通用方法,该方法采用对象列表和表名:

void WriteToServer<T>(List<T> objects, string tableName)
{
    using (var bulk = new SqlBulkCopy(_connectionString))
    {
        bulk.DestinationTableName = tableName;
        bulk.WriteToServer(DataTableHelper.ToDataTable(objects));
    }
}

然后,您可以像这样使用它:

WriteToServer(persons, "Person");
WriteToServer(addresses, "Address");
WriteToServer(contacts, "Contact");

如果Person, Address, 和Contact共享相同的基类型(基类或接口),那么您应该为方法添加一个约束:

void WriteToServer<T>(List<T> objects, string tableName) where T : ISomething

推荐阅读