0

我必须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 的外观如何?

4

1 回答 1

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

有关代表的更多信息:代表(C# 编程指南)- MSDN。有关 lambda 表达式的更多信息:Lambda 表达式(C# 编程指南)- MSDN

希望这可以帮助。

于 2013-10-11T14:22:06.573 回答