c# - 这种数据库扩展可以吗?/ 其他更快(编写)NewRow() 实现
问题描述
您是否同意此扩展程序可以使用正常的代码指南?
还是您更喜欢另一种易于编写的 NewRow() 解决方案?
/// <summary>
/// Adds a new row, with action. After the action, the row will be added to the tab
/// </summary>
public static void NewRow(this DataTable table, Action<DataRow> action)
{
var r = table.NewRow();
action.Invoke(r);
table.Rows.Add(r);
}
....
var tab = new DataTable();
tab.Columns.Add("Foo", typeof(string));
tab.Columns.Add("Bar", typeof(string));
//add one row
tab.NewRow((x) => x["FOO"] = "TEST");
//add another row
tab.NewRow((x) =>
{
x["FOO"] = "TEST2";
x["BAR"] = "TEST2";
});
解决方案
询问人们是否同意某事,几乎按照定义,完全是主观的。它会起作用吗?大概。在我看来,与仅返回行并让调用者在添加后使用它相比,这似乎完全多余,并注意匿名方法(lambdas)可能会在重新捕获变量等方面产生意想不到的成本。但是;它会工作的。
就个人而言,我主要担心的是您是否正在使用DataTable
. 在某些情况下这是合适的,但它们很少而且相差甚远,并且DataTable
不应该是您默认的数据处理选择(除非您正在编写一个处理未知数据库上的即席查询的工具)。对比:
var list = new List<MyPurposeSpecificType>();
//...
list.Add(new MyPurposeSpecificType { Foo = "TEST", Bar = "TEST2" });
推荐阅读
- animation - 如何使用 ArcHandles 和 Handles 旋转/移动包含 Motor6D 的对象?
- python - 为什么我在 Python3 中收到此错误:IndexError: list index out of range
- javascript - 更改 element.style.display ="none" 后如何保持相同的 d-grid 间隙
- algorithm - 区分负循环中的节点和负循环可达的节点
- .net-core - ProjectTo Jsonb 列类型 EF Core 和 automapper 配置
- php - 如何使用 Laravel 将选定的值传递给创建表单?
- go - 什么时候使用嵌入?
- c++ - V8 - 向 Javascript 代码公开一个非 void C++ 函数
- jupyter-notebook - Jupyter Notebook:直接将 html 下载到我的下载文件夹(Windows)
- sql - 如何使用 filter 和 groupBy 在 Scala 和 Quill 中表达这个 SQL 查询?