尝试在 IList 中获取索引位置时出现问题

本文关键字:位置 问题 索引 获取 IList | 更新日期: 2023-09-27 18:28:37

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。索引(位置项(方法

我试图让它工作,但我似乎总是得到 -1 作为索引号。我知道字符串site = loc.Site;在意识到这一点后是空的,所以此时我不知道如何从 IList 获取索引。

为了弄清楚我想要完成的任务,我想学习如何使用 IList 接口成员,我从 IndexOf 接口开始。

IList 填充的不仅仅是"sSite",

但我只是将列表简化为"sSite"作为示例目的。

所以在学习的过程中,我遇到了这个颠簸,盯着代码看了几天(是的,我休息一下,看看其他东西,以免让自己疲惫不堪(。

所以主要问题是我不断得到索引 = -1。

尝试在 IList 中获取索引位置时出现问题

我不清楚你在这里的意图是什么,但在代码片段中,"loc"永远不会被使用,因为你在"添加"方法中创建了一个新Location,而"site"(如你所指出的(总是空的,但在"Add"方法中,你传入一个值并在新创建的实例上设置它,所以除非你传递字符串。作为值为空,比较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作为索引。

假设你在一开始就有这个:

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

您将获得索引。

这也有点令人困惑,因为非常不清楚你想在这里完成什么。请注意,这行代码:

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

仅当满足以下条件时,才会返回您的值:"i.Site == 站点",当然,如果您提供列表中不存在的内容,则不会发生这种情况。