这里我有一个简单的例子,在字符串列表中查找一个项。通常我使用for循环或匿名委托来这样做:

int GetItemIndex(string search)
{
   int found = -1;
   if ( _list != null )
   {
     foreach (string item in _list) // _list is an instance of List<string>
     {
        found++;
        if ( string.Equals(search, item) )
        {
           break;
        }
      }
      /* Use an anonymous delegate
      string foundItem = _list.Find( delegate(string item) {
         found++;
         return string.Equals(search, item);
      });
      */
   }
   return found;
}

LINQ对我来说是新的。我可以使用LINQ在列表中查找项目吗?如果这是可能的,怎么做?


当前回答

你可以使用FirstOfDefault和Where LINQ扩展从IEnumerable中获取MessageAction类。芮米

var action = Message.Actions.Where(e => e.targetByName == className).FirstOrDefault<MessageAction>();

在哪里

List<MessageAction> Actions { get; set; }

其他回答

还有一种检查List<string>中元素是否存在的方法:

var result = myList.Exists(users => users.Equals("Vijai"))

我曾经使用字典,这是一种索引列表,它会在我想要的时候给我想要的东西。

Dictionary<string, int> margins = new Dictionary<string, int>();
margins.Add("left", 10);
margins.Add("right", 10);
margins.Add("top", 20);
margins.Add("bottom", 30);

例如,每当我想访问我的边距值时,我在字典中寻址:

int xStartPos = margins["left"];
int xLimitPos = margins["right"];
int yStartPos = margins["top"];
int yLimitPos = margins["bottom"];

所以,根据你在做什么,字典可能很有用。

如果它确实是一个List<string>,你不需要LINQ,只需使用:

int GetItemIndex(string search)
{
    return _list == null ? -1 : _list.IndexOf(search);
}

如果你正在寻找物品本身,试试:

string GetItem(string search)
{
    return _list == null ? null : _list.FirstOrDefault(s => s.Equals(search));
}

下面是一种重写你的方法来使用LINQ的方法:

public static int GetItemIndex(string search)
{
    List<string> _list = new List<string>() { "one", "two", "three" };

    var result = _list.Select((Value, Index) => new { Value, Index })
            .SingleOrDefault(l => l.Value == search);

    return result == null ? -1 : result.Index;
}

因此,用

GetItemIndex("two")将返回1,

and

GetItemIndex("notthere")将返回-1。

参考:linqsamples.com

这种方法更简单、更安全

var lOrders = new List<string>();

bool insertOrderNew = lOrders。Find(r => r == "1234") == null ?True: false