我必须忽略其产品类型不包含在字典内给定字符串中的项目(列表)。
我试图在foreach循环中迭代字典并检查循环中的产品类型,并且工作正常,但是我想在不进行迭代的情况下使用它,无论如何都可以实现这一目标?
private ConcurrentDictionary<string, List<PAAMsg>> FilterAllowedProductsTrades(ConcurrentDictionary<string, List<PAAMsg>> allPAA)
{
ConcurrentDictionary<string, List<PAAMsg>> newPAA = new ConcurrentDictionary<string, List<PAAMsg>>();
string productType = "BFO,BFT,BOND FWD,CAP,FEE,FEX,FRA,FUT,FxFUT,MFO,SWP,OFT,SWT";
foreach (var item in allPAA)
{
newPAA.TryAdd(
item.Key,
item.Value.FindAll((x => productType.Split(',').Contains(x.ProductType)))
.ToList());
}
return newPAA;
}
我想避免下面的迭代,应该放在一行中。
foreach (var item in allPAA)
{
newPAA.TryAdd(
item.Key,
item.Value.FindAll((x => productType.Split(',').Contains(x.ProductType))).ToList());
}
答案 0 :(得分:3)
我认为不可能避免循环,LINQ只会将其隐藏在其语法后面。因此,这是一个优先事项。
一个可能的替代方案如下:
private ConcurrentDictionary<string, List<PAAMsg>> FilterAllowedProductsTrades(ConcurrentDictionary<string, List<PAAMsg>> allPAA)
{
string productType = "BFO,BFT,BOND FWD,CAP,FEE,FEX,FRA,FUT,FxFUT,MFO,SWP,OFT,SWT";
var productTypes = productType.Split(',');
var enumeration = allPAA.ToDictionary(
x => x.Key,
x => x.Value.Where(p => productTypes.Contains(p.ProductType)).ToList());
return new ConcurrentDictionary<string, List<PAAMsg>>(enumeration);
}
我也建议将Split
操作移出循环。