如何使用Array.Find<;T>;()具有多个参数

本文关键字:参数 Array 何使用 Find lt gt | 更新日期: 2023-09-27 18:21:24

我的项目内置于.Net Framework 2.0中。因此,在我的情况下,我无法使用LINQ

我正试图从Array1和Array2中得到结果,并加入左侧。两个数组都包含使用CCD_ 1方法返回的文件名。现在,我正在尝试使用Array.Find<T>()函数在Array2中查找Array1的项。我正在学习这个msdn教程。

foreach (string file in Array1)
{
    String found = Array.Find(Array2, MatchFileName);
    if (found != String.Empty)
    { ''will do my stuff; }
}
private static bool MatchFileName(String s)
{
    string _match = "100-006";
    return ((s.Length > 5) && (s.Substring(0, 7).ToLower() == _match.ToLower()))
}

它运行良好。但是,问题是匹配部分("100-006")不是固定的——它可以根据foreach循环的项目而变化。但是,我不知道如何传递另一个参数来匹配Array2元素。

我想要这样的东西。

foreach (string file in Array1)
{
    String found = Array.Find(Array2, MatchFileName(file));
    if (found != String.Empty)
    { ''will do my stuff; }
}
private static bool MatchFileName(String s, string file)
{
    string _match = file.Substring(0,7);
    return ((s.Length > 5) && (s.Substring(0, 7).ToLower() == _match.ToLower()))
}

我该怎么做?

如何使用Array.Find<;T>;()具有多个参数

您可以编写一个类来包装参数:

public sealed class Finder
{
    private readonly string _match;
    public Finder(string match)
    {
        _match = match.ToLower();
    }
    public bool Match(string s)
    {
        return ((s.Length > 5) && (s.Substring(0, 7).ToLower() == _match));
    }
}

然后你可以这样使用它:

var finder = new Finder("100-006");
string found = Array.Find(Array2, finder.Match);

请注意,这也允许您优化对_match.ToLower()的重复调用。