我目前正在处理一些重复的代码-更具体地说,这些代码用于处理从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的简单静态函数来处理数据(本质上是没有this参数的扩展方法)。

问题:

在这种情况下,扩展方法是否有意义?为什么将这种做事方式视为危险?

最佳答案

我认为这样做没有任何危险;只要您可以控制所有代码,并且DataSet的布局不会从您的下方更改。这似乎完全像扩展方法设计的那样。

我很想知道这是“危险”用途的说法背后的原因。

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

10-11 11:58