【发布时间】:2011-08-03 02:02:45
【问题描述】:
List<PaymentType> paymentOptions = _PaymentMethods;
_PaymentMethods 是一个公共属性,我想过滤它的副本并将其存储在变量paymentOptions
List<Int32> noInvoice = new List<Int32>(){ 16, 4 , 6 };
foreach (PaymentType pt in paymentOptions)
{
if(noInvoice.Contains(pt.Id))
{
paymentOptions.Remove(pt);
break;
}
}
但是如果你第二次运行这个,变量_PaymentMethods 不再包含被移除的项目。
它似乎是按引用而不是按值... 我不想将列表复制到数组 我应该使用 Linq 还是有其他方法?
编辑:我现在有这个:
List<PaymentType> paymentOptions = ShopController.CurrentShop.PaymentMethods;
List<PaymentType> paymentOptionsFiltered = new List<PaymentType>();
if (haveToFilter)
{
List<Int32> noInvoice = new List<Int32>() { 16, 4, 6 };
foreach (PaymentType pt in paymentOptions)
{
if (!noInvoice.Contains(pt.Id))
{
paymentOptionsFiltered.Add(pt);
}
}
repeaterPaymentOptions.DataSource = paymentOptionsFiltered;
}
else
{
repeaterPaymentOptions.DataSource = paymentOptions;
}
【问题讨论】:
-
您要删除所有匹配
noInvoice列表的内容,还是只删除代码中出现的第一个? -
你说得对,Martinho,但我知道这三个中的一个会同时出现。所以
Remove或RemoveAll都可以。但是这种方式也改变了我未过滤的_PaymentMethods
标签: asp.net c#-4.0 pass-by-reference ilist pass-by-value