c# - 如何创建一个采用映射的通用列表和字符串参数的方法?
问题描述
我现在有这个 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);
解决方案
假设DataTableHelper.ToDataTable()
可以处理Person
//列表Address
,Contact
一种方法是创建一个通用方法,该方法采用对象列表和表名:
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
推荐阅读
- d3.js - 如何在 d3js 中将字符串转换为数字
- python - 隔离森林打印异常
- sql-server - TABLOCK 是否会提高 BULK INSERT 的性能?
- python - 如何在 discord.py 中获取调用命令的人的姓名
- python - 为什么 int2word 程序只打印前十行?
- python - How to make Flask/Jinja2 load bundled templates in an executable zip archive?
- c# - .NET Core EF,何时避免异步数据库调用
- java - Image in javaFx Listview shows only when is selected
- jenkins - 直接从 shell 运行管道
- css - a:hover 不注册 || @关键帧