【发布时间】:2015-11-24 07:39:02
【问题描述】:
在 C# 中,我有一个 List,其中 someStruct 由一个 String 和一个 int 组成。我希望能够找到匹配特定字符串的条目。是否有类似 IndexOf() 的东西可以做到这一点,还是我必须使用 for 循环并检查每个条目的字符串字段是否匹配?
【问题讨论】:
在 C# 中,我有一个 List,其中 someStruct 由一个 String 和一个 int 组成。我希望能够找到匹配特定字符串的条目。是否有类似 IndexOf() 的东西可以做到这一点,还是我必须使用 for 循环并检查每个条目的字符串字段是否匹配?
【问题讨论】:
你可以使用LINQ,
var yourItem = list.FirstOrDefault(entry=>entry.SomeProperty=="SomeValue"); // or list.First
也可以使用List的Find方法:
var yourItem = list.Find(entry=>entry.SomeProperty=="SomeValue");
【讨论】:
您可以通过List<T> 的FindIndex 方法做到这一点:
var list = new List<Item>();
list.Add(new Item { Id = 1, Data = "Test1" });
list.Add(new Item { Id = 2, Data = "Test2" });
var index = list.FindIndex(x => x.Id == 2); // Second scenario FindIndex(x=> x.Data == "Test2");
Item 在哪里:
public struct Item
{
public int Id { get; set; }
public string Data { get; set; }
}
【讨论】:
如果您正在查找字符串并返回 id,则无需使用索引:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Item> myList = new List<Item>() {
new Item() {Id = 123, Data = "abc"},
new Item() {Id = 124, Data = "abd"},
new Item() {Id = 125, Data = "abe"},
new Item() {Id = 126, Data = "abf"},
new Item() {Id = 127, Data = "abg"}
};
int id = myList.Where(x => x.Data == "abe").Select(y => y.Id).FirstOrDefault();
}
}
public struct Item
{
public int Id { get; set; }
public string Data { get; set; }
}
}
【讨论】: