繁体   English   中英

对象列表投射的最佳方法是什么

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM