Проблемы, пытающиеся получить местоположение индекса в IList - PullRequest
1 голос
/ 22 марта 2012
class IList2
{
    static void Main(string[] args)
    {

        Locations test = new Locations();
        Location loc = new Location();
        string sSite = "test";
        test.Add(sSite);
        string site = loc.Site; 
        Location finding = test.Where(i => i.Site == site).FirstOrDefault();
        int index = finding == null ? -1 : test.IndexOf(finding); 
    }
}

public class Location
{
    public Location()
    {

    }
    private string _site = string.Empty;
    public string Site
    {
        get { return _site; }
        set { _site = value; }
    }
 }

 public class Locations : IList<Location>
 {
    List<Location> _locs = new List<Location>();

    public Locations() { }

    public int IndexOf(Location item)
    {

        return _locs.IndexOf(item);

    }
    //then the rest of the interface members implemented here in IList
    public void Add(string sSite)
    {
        Location loc = new Location();
        loc.Site = sSite;

        _locs.Add(loc);
    }
  }

  IEnumerator<Location> IEnumerable<Location>.GetEnumerator()
    {
        return _locs.GetEnumerator();
    }

Мне немного помогли в этом посте: Попытка вызова метода int IList .IndexOf (Location item)

Я пытался заставить это работать, но явсегда, кажется, получить -1 в качестве номера индекса.Я знаю, что строка site = loc.Site; пуста после осознания этого, поэтому я не знаю точно, как получить индекс из IList на данный момент.

Чтобы выяснить, чего я пытаюсь достичь, я хочуУзнайте, как использовать члены интерфейса IList, и я начал с интерфейса IndexOf.

IList содержит больше, чем просто "sSite", но я просто сокращаю список до "sSite" для примера.

Так что в середине обучения я натолкнулся на этот ударв дороге и несколько дней пялился на код (да, я делаю перерывы и смотрю на другие вещи, чтобы не утомляться).

Итак, главная проблема в том, что я продолжаю получать индекс = -1.

Ответы [ 2 ]

4 голосов
/ 23 марта 2012

Мне неясно, что вы намерены здесь делать, но во фрагменте кода "loc" никогда не используется, потому что вы создаете новый Location в методе "Add", а "site" - это (как вы уже заметили) ) всегда пусто, но в методе «Add» вы передаете значение и устанавливаете его для вновь созданного экземпляра, поэтому, если вы не передали в качестве значения string.Empty, сравнение i.Site == site всегда будет false. Если удалить их и переписать как:

Locations test = new Locations();
string sSite = "test";
test.Add(sSite);
Location finding = test.Where(i => i.Site == sSite).FirstOrDefault();
int index = test.IndexOf(finding); 

Тогда это возвращает 0 в качестве индекса.

2 голосов
/ 23 марта 2012

Предполагая, что у вас есть это в начале:

Location loc = new Location();
loc.Site = "test";

Вы получите свой индекс.

Также это немного сбивает с толку, потому что очень неясно, чего вы хотите достичь здесь. Обратите внимание, что эта строка кода:

test.Where(i => i.Site == site).FirstOrDefault();

вернет вам значение, только если верно следующее: «i.Site == site», что, конечно, не может произойти, если вы предоставите что-то, чего нет в списке.

...