У меня есть список элементов типа Country, и я пытаюсь найти индекс и конкретную страну в списке, но метод IndexOf () всегда возвращает -1.
Объект Country выглядит следующим образомthis:
public class Country
{
public string CountryCode { get; set; }
public string CountryName { get; set; }
}
Затем, когда я пытаюсь использовать метод IndexOf (), я делаю следующее:
var newcountry = new Country
{
CountryCode = "VE",
CountryName = "VENEZUELA"
};
var countries = ListBoxCountries.Items.Cast<Country>().ToList();
if (countries.IndexOf(newcountry) == -1)
countries.Add(newcountry);
Допустим, у меня уже есть заполненный список со странами и "Венесуэла "находится в списке, метод IndexOf () никогда не находит страну.
РЕДАКТИРОВАТЬ:
Так что я получил небольшую помощь от ReSharper здесь, и он сделал это, как только я сказал ему переопределитьметод Equals ():
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != typeof (Country)) return false;
return Equals((Country) obj);
}
public bool Equals(Country other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return Equals(other.CountryCode, CountryCode) && Equals(other.CountryName, CountryName);
}
public override int GetHashCode()
{
unchecked
{
return ((CountryCode != null ? CountryCode.GetHashCode() : 0)*397) ^ (CountryName != null ? CountryName.GetHashCode() : 0);
}
}
И тут возникает другой вопрос: можно ли все это делать, просто сравнивая два объекта?