我从Business层返回IList。但在viewmodel中我必须使用Find函数。 一种方法是将IList转换为List。
但是无论如何都要向IList添加“查找”方法
答案 0 :(得分:7)
嗯,有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);
}
}
答案 1 :(得分:2)
您可以使用IndexOf方法吗?
答案 2 :(得分:2)
你可以使用Where方法
list.Where(predicate).First()
答案 3 :(得分: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);
答案 4 :(得分: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));
}
}