c# 编写扩展方法以扩展 System.Linq 中的功能

本文关键字:扩展 Linq 功能 System 方法 | 更新日期: 2023-09-27 17:56:28

我过去只使用过几次扩展方法,所以如果这是一个非常愚蠢的问题,请原谅我。

我有 3 个不同的字符串数组,

我也有 3 个字符串,我想在这些数组中搜索。

到目前为止,我有这样的东西:

if (list1.Any(x => x == term1) && list2.Any(x => x == term2) && list3.Any(x => x == term3))
            {
                //do something
            }

因此,如果找到所有项,if 语句应该 = true。

我试图用扩展方法解决的问题是....

术语 1、术语

2、术语 3 的值可能为"-1",如果是这种情况,我想在 if 语句中忽略它。

所以我的问题是,这可以通过扩展方法完成吗?所以而不是使用列表。任何()我可以使用列表。MyMethod(),如果任何项的值为 -1,则返回 true。

c# 编写扩展方法以扩展 System.Linq 中的功能

当然,您可以使用扩展方法。是否应该是一个完全不同的问题。

public static class MyExtensions
{
    public static bool MyMethod<T>(this IEnumerable<T> list, T term)
    {
        if(term != null && term.ToString() == "-1")
          return false; // or true, whichever is your requirement.
        return list.Any(x => x == term);
    }
}

用法

if(list1.MyMethod(term1) && list2.MyMethod(term2) && list3.MyMethod(term3)) { ... }

铌。无论你做什么,都不要称它MyMethod

您可以定义一个相当简单的方法来执行此操作。我将假设字符串,但使用泛型并不太困难(只是在弄清楚 -1 通常是什么时进入奇怪的逻辑):

static class MyExtensions 
{
     public static bool AnyOrMinusOne(this IEnumerable<string> list, string term) 
     {
        return term == "-1" || list.Any(x => x == term);
     }
}

那么你的陈述变成:

if (list1.AnyOrMinusOne(term1) && list2.AnyOrMinusOne(term2) && list3.AnyOrMinusOne(term3))
{
    //do something
}