Reputation: 839
When using .ForEach
to update the RemarkText
property in an object. It is updating the RemarkText
property value on the remarksToDeleteand
endTransactionResponse` property.
private List<Remark> GetElementsToDelete(Gds.Response.CreateResponse endTransactionResponse, List<Remark> ticketRemarks, List<Remark> elementsToAdd)
{
var remarksToDelete = new List<Remark>();
foreach (var ticketRemark in ticketRemarks)
{
ticketRemark.RemarkText = TrimEnd(ticketRemark.RemarkText);
var remarks = endTransactionResponse.Remarks.Where(
x => x.RemarkType == ticketRemark.RemarkType
&& (x.RemarkType == RemarkTypes.END || this.remarkText.Any(x.RemarkText.ToUpper().Contains))
&& x.GdsReference != null
&& !string.IsNullOrEmpty(x.GdsReference.GdsReferenceId));
if (remarks.Any())
{
remarks.Where(x => !x.RemarkText.Contains(PassengerTypes.INF.ToString()))
.ToList()
.ForEach(x => x.RemarkText = ticketRemark.RemarkText);
remarksToDelete.AddRange(remarks);
}
else
{
elementsToAdd.Add(ticketRemark);
}
}
return remarksToDelete;
}
I tried to use ToList()
with endTransactionResponse.Remarks.Where(...).ToList()
, also tried to add new list new List(newRemarks)
, I also tried to use .Select(x => { x.RemarkText = ticketRemark.RemarkText; return x });
but none work for me.
Why this is happening? How can we fix the problem?
The response will be highly appreciated.
Upvotes: 0
Views: 980
Reputation: 216253
You can simplify everything using a normal foreach acting over the IEnumerable remarks and extracting only the remarks that you need to delete.
if(remarks.Any())
{
foreach(Remark r in remarks.Where(x => !x.RemarkText.Contains(PassengerTypes.INF.ToString()))
{
r.RemarkText = ticketRemark.RemarkText;
remarksToDelete.Add(r);
}
}
In your code you create a new List with ToList() and then proceed to change the RemarkText for every object materialized by the ToList(). But this list is never assigned to anything. Not certainly to the remarks IEnumerable, so your changes are lost.
Upvotes: 2