c# - 我应该使用扩展方法来帮助从 DataRow/Table 创建模型对象吗?

标签 c# .net extension-methods

我目前使用一些重复的代码 - 更具体地说,是处理从 DataRowDataTable 创建模型对象的代码。我认为创建扩展方法来减少重复代码并添加一些语法糖是安全的。

我之前有什么(简化):

public List<MyObject> GetThings(){
    DataSet dataSet = SomeDatabaseCall();

    var objects = new List<MyObject>();
    foreach(DataRow row in dataSet.Tables[0].Rows){
        //Process Row, create object, add to objects
    }
    return objects;
}
public MyObject GetThing(int id){
    DataSet dataSet = SomeDatabaseCall(id);
    DataRow row = dataSet.Tables[0].Rows[0];
    //Process Row, create object, return it
}

之后我想要什么:

public List<MyObject> GetThings(){
    DataSet dataSet = SomeDatabaseCall();
    return dataSet.ToMyObjects(); //Internally calls the ToMyObject for each row
}
public MyObject GetThing(int id){
    DataSet dataSet = SomeDatabaseCall(id);
    DataRow row = dataSet.Tables[0].Rows[0];
    return row.ToMyObject();
}

问题:

有人向我指出,以这种方式使用扩展方法是危险的,我应该使用采用 DataRow 的简单静态函数来处理数据(本质上是一个没有这个参数)。

问题:

扩展方法在这种情况下有意义吗?为什么这种做事方式会被认为是危险的?

最佳答案

扩展方法并不比创建静态方法更危险,因为扩展方法编译为静态方法。它们只是为程序员带来好处的语法糖。您可以自己比较IL,但这里有一篇文章和一个示例,可以帮助您说服您的同事扩展方法并不危险:How do Extension Methods work?

关于c# - 我应该使用扩展方法来帮助从 DataRow/Table 创建模型对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4226690/

相关文章:

c# - SetColorFilter 在 Xamarin.Android 中不起作用

c# - 具有定义路径大小的随机路径生成算法

c# - Resources.ApplyResources 上的 System.Resources.MissingManifestResourceException

c# - 在 C# 中处理文件时确定缓冲区大小?

c# - 我可以在扩展方法中设置 decimal 变量的值吗?

c# - C# 中的 OFX​​ 文件解析器

c# - MVC Razor 创建要提交的对象列表

.net - IdentityServer4 总是返回 "error": "invalid_scope"

c# - 获取扩展方法的 MethodInfo

vb.net - 证明我的错误: VB. NET HtmlHelper扩展方法无法在VS 2012的MVC 4中使用