我的项目已在.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()))
}
我该怎么做?
答案 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()
。