是否可以让我的代码更具性能?我认为必须有比“foreach”更好的方式。
我的对象:
public class FirstObject{
public string Name { get; set; }
public decimal DecimalProp { get; set; }
}
public class SecondObject{
public string Name { get; set; }
public string StringProp { get; set; }
}
这是我的代码:
List<SecondObject> secondObjectList = GetAllSecondObjects(); //This method returns tens of data
List<FirstObject> firstObjectList = new List<FirstObject>();
foreach(var item in secondObjectList){
FirstObject obj = new FirstObject
{
Name = item.Name,
DecimalProp = Convert.ToDecimal(item.StringProp)
};
firstObjectList.Add(obj);
}
感谢。
答案 0 :(得分:2)
为了加快速度(在多核系统上),你可以让它并行运行:
secondObjectList.AsParallel().ForAll(s =>
{
FirstObject obj = new FirstObject
{
Name = item.Name,
DecimalProp = Convert.ToDecimal(item.StringProp)
};
firstObjectList.Add(obj);
});
或者使用LINQ作为Ehsan建议:
var firstObjectList = secondObjectList.AsParallel().Select(s => new FirstObject
{
Name = s.Name,
DecimalProp = Convert.ToDecimal(s.StringProp)
});
除此之外,你可以做的事情不多,因为工作需要以某种方式完成,而简单循环的开销相当小......
P.S。:请记住,AsParellel
可以(很可能会)改变列表中对象的顺序。
答案 1 :(得分:1)
如果您的类非常相似,您可以进行继承并简化代码:
public class SecondObject : FirstObject
{
private string _stringProp;
public string StringProp {
get { return _stringProp; }
set
{
_stringProp = value;
DecimalProp = Convert.ToDecimal(value);
}
}
}
然后说
var secondObjectList = GetAllSecondObjects(); //This method returns tens of data
var firstObjectList = secondObjectList.Cast<FirstObject>().ToList();
我认为它有更好的表现。
答案 2 :(得分:0)
如果你想穿上衬里,你可以使用LINQ:
List<SecondObject> secondObjectList = GetAllSecondObjects(); //This method returns tens of data
var firstObjectList = secondObjectList.Select(x=> new FirstObject
{
Name = x.Name,
DecimalProp = Convert.ToDecimal(x.StringProp)
}).ToList();