将 lambda 作为参数传递给将查询资源集的方法
本文关键字:资源 方法 查询 lambda 参数传递 | 更新日期: 2023-09-27 18:35:02
我必须通过每个Key
中的某种字符串模式过滤ResourceSet
。为此,我的函数必须接收 lambda 表达式作为参数。我没有 lambda 的经验,所以我不知道如何查询资源集中的每个字典条目。
这是我目前的方法,但看起来又丑又旧:
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 参数的外观如何?λ会是什么样子?
你想要传递一个谓词,该谓词是一个接受字符串并返回一个布尔值的函数,指示输入字符串是否与某个条件匹配。
您的实现如下所示:
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)));
有关委托的更多信息:委托(C# 编程指南( - MSDN。有关 lambda 表达式的更多信息:Lambda 表达式(C# 编程指南( - MSDN。
希望这有帮助。