I want to change the money value in my list, but I always get an error message:
Cannot modify the return value of 'System.Collections.Generic.List.this[int]' because it is not a variable
What is wrong? How can I change the value?
struct AccountContainer
{
public string Name;
public int Age;
public int Children;
public int Money;
public AccountContainer(string name, int age, int children, int money)
: this()
{
this.Name = name;
this.Age = age;
this.Children = children;
this.Money = money;
}
}
List<AccountContainer> AccountList = new List<AccountContainer>();
AccountList.Add(new AccountContainer("Michael", 54, 3, 512913));
AccountList[0].Money = 547885;
You have declared AccountContainer
as a struct
. So
AccountList.Add(new AccountContainer("Michael", 54, 3, 512913));
creates a new instance of AccountContainer
and adds a copy of that instance to the list; and
AccountList[0].Money = 547885;
retrieves a copy of the first item in the list, changes the Money
field of the copy and discards the copy – the first item in the list remains unchanged. Since this is clearly not what you intended, the compiler warns you about this.
Solution: Do not create mutable struct
s. Create an immutable struct
(i.e., one that cannot be changed after it has been created) or create a class
.
You're using an evil mutable struct.
Change that to a class and everything will work fine.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With