List<PaymentType> paymentOptions = _PaymentMethods;
_PaymentMethods
是公共財產,我想過濾它的副本,並將其存儲在變量paymentOptions
過濾器的IList <T>
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'列表或第一個列表的列表在你的代碼中發生? – 2011-04-11 13:42:01
你說得對,馬蒂奧,但我知道三人中只有一人會發生在同一時間。所以'Remove'或'RemoveAll'都很好。但這種方式改變了我未經過濾的_PaymentMethods也 – 2011-04-11 13:47:01