获取列表中元素的参数索引

时间:2018-11-13 09:25:26

标签: c# list linq

很难解释用“普通”语言编写它的问题,所以我只发布我的代码(这会更容易理解):

我有我的课程File

public class File
{
    public string Url { get; set; }
    public string Name { get; set; }
    public string Date { get; set; }
    public Bitmap Bitmap { get; set; }
}

因此,我创建了files的列表:

var files = new List<File>();

而且,我已经在其中填充了数据。

现在我有一个string(仅此)。我想在列表中找到包含该string的元素的索引。

类似的东西:

int index = files.IndexOf(new File
        {
            string.Empty,
            myString,
            string.Empty,
            null
        });

有什么主意吗?

4 个答案:

答案 0 :(得分:5)

List类具有一个名为FindIndex的方法,该方法以Predicate<T>作为参数。

您可以像这样使用它:

var index = files.FindIndex(f => f.Name == myString);

它将返回与谓词匹配的第一个元素的索引;如果未找到该元素,则返回-1。

答案 1 :(得分:0)

我想您想找到Name属性等于myString variale的第一个元素的索引:

var index = files.IndexOf(files.Where(x => x.Name == myString).FirstOrDefault());

或更简单的方法:

var index = files.IndexOf(files.FirstOrDefault(x => x.Name == myString));`

如果找不到这样的元素,则两者都返回-1。

答案 2 :(得分:0)

首先,我找到包含Name的所有myString实例,然后使用IndexOf在列表中查找其索引。结果是实例的集合索引

var indexs = files.Where(f => f.Name.Contains(myString)).Select(ft=> files.IndexOf(ft));

答案 3 :(得分:0)

为什么不像这样使用foreach循环

int pos = -1;
foreach(File file in files)
{
  pos++;
  if(file.Name == "string")
    break;
}