
[英]What is the best way to get the percentage for an object in linq list and map it to JSON?
[英]What is the best way of object list casting
是否可以提高我的代码的性能? 我认为必须有比“ 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);
}
谢谢。
为了使其更快(在多核系统上),您可以使其并行运行:
secondObjectList.AsParallel().ForAll(s =>
{
FirstObject obj = new FirstObject
{
Name = item.Name,
DecimalProp = Convert.ToDecimal(item.StringProp)
};
firstObjectList.Add(obj);
});
或结合Ehsan建议使用LINQ:
var firstObjectList = secondObjectList.AsParallel().Select(s => new FirstObject
{
Name = s.Name,
DecimalProp = Convert.ToDecimal(s.StringProp)
});
除此之外,您无能为力,因为需要以某种方式完成工作,并且简单循环的开销很小。
PS:请记住, AsParellel
可以(而且很可能会)更改列表中对象的顺序。
如果您的类非常相似,则可以进行继承并简化如下代码:
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();
我认为它具有更好的性能。
如果需要衬板,可以使用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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.