5

我正在从业务层返回 IList。但在视图模型中我必须使用 Find 功能。一种方法是将 IList 转换为 List。

但是无论如何要向IList添加“查找”方法

4

5 回答 5

8

好吧,有 Linq 扩展方法.Where(用于匹配所有匹配项)和.FirstOrDefault(用于获取第一个匹配项),或者您可以针对 IList 编写自己的扩展方法,例如:

public static class IListExtensions
{
    public static T FindFirst<T>(this IList<T> source, Func<T, bool> condition)
    {
        foreach(T item in source)
            if(condition(item))
                return item;
        return default(T);
    }
}
于 2010-11-14T03:12:27.180 回答
2

您可以使用 IndexOf 方法吗?

http://msdn.microsoft.com/en-us/library/3w0148af.aspx

于 2010-11-14T03:01:54.307 回答
2

你可以使用 Where 方法

list.Where(predicate).First()
于 2010-11-14T03:13:20.047 回答
0

非常简单,just you need

铸造步骤

var myModelasList= IListReturnedViewModel as List<ViewModelObject>;
//now you can use list feaures like Find Func.
myModelasList.Find((t => t.SomeFiald== currentState && t.IsSomting == somesymbol);
于 2015-11-15T14:31:02.583 回答
0

我写了一个扩展方法来为我做转换。

public static T Find<T>(this IList<T> ilist, Predicate<T> match)
{
  if (ilist is List<T> list)
  {
    return list.Find(match);
  }
  else if (ilist is T[] array)
  {
    return Array.Find(array, match);
  }
  else
  {
    return ilist.FirstOrDefault(i => match(i));
  }
}
于 2020-12-08T00:12:17.743 回答