C#如何为List中的每个项目调用方法<>

时间:2017-03-05 14:28:36

标签: c#

我有一个班级:

[DataContract]
public class InventoryItem : NotifyPropertyChangeObject
{
    private Guid _inventoryItemUid;
    private string _description;
    private bool _isActive;

    [DataMember]
    public Guid InventoryItemUid {
        get { return _inventoryItemUid; }
        set { ApplyPropertyChange<InventoryItem, Guid>(ref _inventoryItemUid, o => o.InventoryItemUid, value); }
    }
    [DataMember]
    public string Description {
        get { return _description; }
        set { ApplyPropertyChange<InventoryItem, String>(ref _description, o => o.Description, value); }
    }
    [DataMember]
    public bool IsActive {
        get { return _isActive; }
        set { ApplyPropertyChange<InventoryItem, Boolean>(ref _isActive, o => o.IsActive, value); }
    }

    public void CustomMethod()
    {
        // here some code....
    }
}

在我的应用程序代码中,我得到了List<InventoryItem>

List<Entities.InventoryItem> items = new List<Entities.InventoryItem>();

var newItem = new Entities.InventoryItem();

using (Logistics.Data.Warehouse svc = new Data.Warehouse())
{
    items = svc.GetInventoryItems().ToList();
}

我需要调用List<InventoryItem>方法CustomMethod()中的每个项目。

  

在性能方面,最好的方法是什么?

我知道我可以做foreach但是如果我获得5,000行,那么foreach可能对性能不利。实际上这个CustomMethod()就像初始化代码一样。

1 个答案:

答案 0 :(得分:0)

如果您的列表是一个巨大的列表,您可以将它分成20个项目组并在每个项目上并行执行:

private void CustomVoid(string s)
{

}

List<string> items = new List<string>();
for (int i = 0; i <= items.Count / 20; i++)
{
      List<string> smallList = items.Skip(i * 20).Take(20).ToList();
      smallList.AsParallel().ForAll(sm => CustomVoid(sm));
}

在下面的评论中建议忘记循环并仅使用此:

items.AsParallel().ForAll(sm => CustomVoid(sm));

这可能会有更好的表现。

我希望它有所帮助。