让我们看看这段代码:
IList<IHouseAnnouncement> list = new List<IHouseAnnouncement>();
var table = adapter.GetData(); //get data from repository object -> DataTable
if (table.Rows.Count >= 1)
{
for (int i = 0; i < table.Rows.Count; i++)
{
var anno = new HouseAnnouncement();
anno.Area = float.Parse(table.Rows[i][table.areaColumn].ToString());
anno.City = table.Rows[i][table.cityColumn].ToString();
list.Add(anno);
}
}
return list;
以更少的代码和更好的方式编写它是更好的方法吗(必须是 :-) )?也许使用 lambda(但让我知道如何使用)?
提前致谢!
最佳答案
仅供引用,您永远不会将新的 HouseAnnouncement
添加到您的列表中,并且您的循环永远不会在最后一行执行,但我假设这些是示例中的错误,而不是您的实际代码中的错误。
你可以这样做:
return adapter.GetData().Rows.Cast<DataRow>().Select(row =>
new HouseAnnouncement()
{
Area = Convert.ToSingle(row["powierzchnia"]),
City = (string)row["miasto"],
}).ToList();
我通常追求可读性而不是简洁,但我觉得这很好读。
请注意,虽然您仍然可以缓存
DataTable
并在 lambda 中使用 table.powierzchniaColumn
,但我消除了它,这样您就不会使用不是真正必要的闭包(闭包为 lambda 的内部实现引入了相当大的复杂性,所以我避免如果可能的话)。如果保持列引用不变对您来说很重要,那么您可以这样做:
using (var table = adapter.GetData())
{
return table.Rows.Cast<DataRow>().Select(row =>
new HouseAnnouncement()
{
Area = Convert.ToSingle(row[table.powierzchniaColumn]),
City = (string)row[table.miastoColumn],
}).ToList();
}
这将增加编译器生成的实际 IL 的复杂性,但应该为您解决问题。
关于c# - 如何以更好的方式写这个?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2587367/