首页 > 解决方案 > 这种数据库扩展可以吗?/ 其他更快(编写)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";
            });


标签: c#

解决方案


询问人们是否同意某事,几乎按照定义,完全是主观的。它会起作用吗?大概。在我看来,与仅返回行并让调用者在添加后使用它相比,这似乎完全多余,并注意匿名方法(lambdas)可能会在重新捕获变量等方面产生意想不到的成本。但是;它会工作的。

就个人而言,我主要担心的是您是否正在使用DataTable . 某些情况下这是合适的,但它们很少而且相差甚远,并且DataTable 不应该是您默认的数据处理选择(除非您正在编写一个处理未知数据库上的即席查询的工具)。对比:

var list = new List<MyPurposeSpecificType>();
//...
list.Add(new MyPurposeSpecificType { Foo = "TEST", Bar = "TEST2" });

推荐阅读