检索作为属性/公共字段

时间:2015-05-15 17:52:14

标签: c# .net list reference

我尝试做一件简单的事情 - 将列表中的对象替换为另一个对象,以及更新的'。问题是实际列表没有得到更新。列表已定义并存储在我的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没有更新,我做错了什么?解决这个问题的正确方法是什么?

3 个答案:

答案 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();