如何使用带有多个参数的Array.Find <t>()?</t>

时间:2014-09-10 09:44:59

标签: c# arrays

我的项目已在.Net Framework 2.0中构建。所以,在我的情况下,我无法使用 LINQ

我试图通过左连接从Array1和Array2获取结果。两个数组都包含使用Directory.GetFiles()方法返回的文件名。现在,我试图使用Array.Find<T>()函数在Array2中找到Array1的项目。我正在关注这个msdn tutorial.

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

我该怎么做?

1 个答案:

答案 0 :(得分:2)

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

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()