将 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 参数的外观如何?λ会是什么样子?

将 lambda 作为参数传递给将查询资源集的方法

你想要传递一个谓词,该谓词是一个接受字符串并返回一个布尔值的函数,指示输入字符串是否与某个条件匹配。

您的实现如下所示:

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。

希望这有帮助。

相关文章: