我必须在每个ResourceSet
中按某种字符串模式过滤Key
。为此,我的函数必须作为参数接收 lambda表达式。我对 lambda 没有经验,所以我不知道如何查询 ResourceSet 中的每个 DictionaryEntry 。
这是我目前的方法,但看起来很丑陋和旧:
public IDictionary<string, string> FindStrings(string resourceName, params string[] pattern)
{
OpenResource(resourceName);
ResourceSet resourceSet = _currentResourseManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
Dictionary<string, string> result = new Dictionary<string, string>();
foreach (DictionaryEntry entry in resourceSet)
{
string resourceKey = entry.Key.ToString();
foreach (string p in pattern)
{
if (resourceKey.StartsWith(p))
{
string resource = entry.Value.ToString();
result.Add(resourceKey, resource);
}
}
}
return result;
}
我的Func参数看起来如何? lambda看起来怎么样?
答案 0 :(得分:2)
您希望传递一个谓词,它是一个接受字符串的函数,并返回一个布尔值,指示输入字符串是否与某些条件匹配。
以下是您的实施方式:
public IDictionary<string, string> FindStrings(string resourceName, Func<string, boolean> keySelector)
{
OpenResource(resourceName);
ResourceSet resourceSet = _currentResourseManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
Dictionary<string, string> result = new Dictionary<string, string>();
foreach (DictionaryEntry entry in resourceSet)
{
string resourceKey = entry.Key.ToString();
if (keySelector(resourceKey))
{
string resource = entry.Value.ToString();
result.Add(resourceKey, resource);
}
}
return result;
}
以下是使用lambda表达式调用方法的方法:
var patterns = new string[] { "test1", "test2" };
var results = FindString("Resource1", key => patterns.Any(p => key.StartsWith(p)));
有关代表的更多信息:Delegates (C# Programming Guide) - MSDN。 有关lambda表达式的更多信息:Lambda Expressions (C# Programming Guide) - MSDN。
希望这有帮助。