我目前使用一些重复的代码 - 更具体地说,是处理从 DataRow
和 DataTable
创建模型对象的代码。我认为创建扩展方法来减少重复代码并添加一些语法糖是安全的。
我之前有什么(简化):
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/