我尝试做一件简单的事情 - 将列表中的对象替换为另一个对象,以及更新的'。问题是实际列表没有得到更新。列表已定义并存储在我的DataProvider
类中:
public class CountriesDataSet
{
List<Country> b;
private IXmlBinder xmlBinder;
public CountriesDataSet()
{
xmlBinder = new BasicXmlLoader();
Countries = xmlBinder.Load();
}
public List<Country> Countries;
public void Save()
{
xmlBinder.Save(Countries);
}
}
用法是在另一个类中,让我们称之为控制器,在那里我存储我的CountriesDataSet
类的实例。
我试图在那里进行更新:
var countries = countriesDataSet.Countries;
Country country = countries.First(c => c.Id == id);
if (country != null)
{
country = newCountry;
countriesDataSet.Save();
}
我可以看到该国家/地区已替换为newCountry
的新实例,但countriesDataSet.Countries
没有更新,我做错了什么?解决这个问题的正确方法是什么?
答案 0 :(得分:2)
使用country
newCountry
的信息
为例:
var countries = countriesDataSet.Countries;
Country country = countries.First(c => c.Id == id);
if (country != null)
{
country.State = newCountry.State;
country.Flag = NewCountry.Flag;
...
countriesDataSet.Save();
}
或者那样 :
int index = listofelements.IndexOf(oldValue);
if(index != -1)
listofelements[index] = newValue;
答案 1 :(得分:1)
尝试替换“最新”值,而不是创建新实例。
此外,如果找不到匹配项,First()
会抛出异常,因为您在测试null
时显然担心这一点。如果您预计最多只有一场比赛,请使用FirstOrDefault
(或SingleOrDefault
。
var countries = countriesDataSet.Countries;
Country country = countries.FirstOrDefault(c => c.Id == id);
if (country != null)
{
country.SomeProperty = newCountry.SomeProperty;
country.SomethingElse = newCountry.SomethingElse;
countriesDataSet.Save();
}
答案 2 :(得分:1)
var countries = countriesDataSet.Countries;
var index = countries.FindIndex(c => c.Id == id));
if (index >= 0)
countries[index] = newCountry;
countriesDataSet.Save();