如何添加“查找”函数到 IList

发布于 2024-10-02 17:11:21 字数 97 浏览 6 评论 0原文

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

但是有没有办法向 IList 添加“Find”方法

I am returning IList from Business layer. But in viewmodel I have to use Find function.
One method is to convert IList to List.

But is there anyway to add "Find" method to IList

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

你不是我要的菜∠ 2024-10-09 17:11:21

那么,有 Linq 扩展方法 .Where (用于影响所有匹配项)和 .FirstOrDefault (用于获取第一个匹配项),或者您可以编写自己的扩展方法列表如下:

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);
    }
}

Well, there are the Linq extension methods .Where (to fecth all that match) and .FirstOrDefault (to fetch the first match) or you can write your own extension method against IList like:

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);
    }
}
Bonjour°[大白 2024-10-09 17:11:21

你可以使用Where方法

list.Where(predicate).First()

you can use Where method

list.Where(predicate).First()
傻比既视感 2024-10-09 17:11:21

非常简单,正是您所需要的

铸造步骤

var myModelasList= IListReturnedViewModel as List<ViewModelObject>;
//now you can use list feaures like Find Func.
myModelasList.Find((t => t.SomeFiald== currentState && t.IsSomting == somesymbol);

very simple, just you need

casting step

var myModelasList= IListReturnedViewModel as List<ViewModelObject>;
//now you can use list feaures like Find Func.
myModelasList.Find((t => t.SomeFiald== currentState && t.IsSomting == somesymbol);
人疚 2024-10-09 17:11:21

我编写了一个扩展方法来为我进行转换。

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));
  }
}

I wrote an extension method to do the casting for me.

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));
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文