Не совсем понятно, какой у вас вопрос. Я предполагаю из вашего комментария //nothing
, что ваш вопрос является одним из следующих:
1
Я реализовал IList<Location>.IndexOf(Location)
в своем классе Locations
, но я получаю ошибку компилятора при попытке вызвать метод в экземпляре класса Locations
.
Если это ваш вопрос, тогда у вас есть два варианта. Вы можете изменить реализацию с явной реализации элемента интерфейса на неявную one:
public int IndexOf(Location item)
{
return _locs.IndexOf(item);
}
Кроме того, вы можете получить доступ к методу через ссылку типа IList<Location>
, а не ссылку Locations
:
Locations locations = GetLocations();
Location location = GetLocation();
int index = ((IList<Location>)locations).IndexOf(location);
Первый подход более распространен и обычно менее многословен.
2
Я реализовал IList<Location>.IndexOf(Location)
в своем классе Locations
, делегировав вызов обернутому члену List<Location>
этого класса, но когда я вызываю метод, он всегда возвращает -1, указывая, что список не содержит пройденное местоположение.
Если это ваш вопрос, это потому, что вы не переопределили метод Equals(object)
в своем классе Location и пытаетесь найти местоположение, подобное этому:
Locations locations = GetLocations();
string site = GetSite();
Location location = new Location { Site = site };
int index = ((IList<Location>)locations).IndexOf(location);
Здесь индекс всегда будет равен -1, поскольку IndexOf проверяет объекты местоположения, используя ссылочное равенство . Вы можете переопределить «Равно», если хотите считать два местоположения равными, если и только если их свойства сайта равны.
Если это отношение равенства не является универсально допустимым для типа Location, вы не должны этого делать. В этом случае вы можете использовать linq, чтобы найти местоположение, сайт которого соответствует требуемому значению:
Location location = locations.Where(x => x.Site == site).FirstOrDefault;
Если вам нужен индекс местоположения, просто сделайте это (при условии, что locations
не может законно содержать нулевое значение):
Location location = locations.Where(x => x.Site == site).FirstOrDefault;
int index = location == null ? -1 : locations.IndexOf(location);