0

在我的代码中,我有“sourceElements”是一种

List<KeyValuePair<string, string>>.

我需要查询此列表的键是否包含特定值,我尝试了这个:

        sourceElements.Add(new KeyValuePair<string, string>("t","t"));
        sourceElements.Add(new KeyValuePair<string, string>("test", "test"));
        sourceElements.Add(new KeyValuePair<string, string>("t1", "t2"));

        if (sourceElements.All(x => x.Key.Contains("test", StringComparer.InvariantCultureIgnoreCase))
        {
             // do some stuff here
        }

但编译器报告“无法从用法中推断出类型参数”。

代码中不正确的任何想法?

4

4 回答 4

1

if语句不应该是:

if(sourceElements.All(x => x.Key.ToLowerInvariant().Contains("test"))
{
     // do some stuff here
}

Contains将返回trueor false,而不是整数。

于 2013-08-05T08:55:52.890 回答
1

这里的问题是没有Contains采用String这些参数类型的方法。只有一个 的重载,Contains它需要一个 type 的参数String

我相信你正在寻找方法Index(string, StringComparison)

if (sourceElements.All(x => x.Key.IndexOf("test", StringComparison.InvariantCultureIgnoreCase) >= 0))

如果您希望原始代码正常工作,您可以添加一个扩展方法,String该方法看起来具有这种重载。

bool Contains(this string str, string value, StringComparison comp) {
  return str.IndexOf(value, comp) >= 0;
}
于 2013-08-05T08:56:57.953 回答
1
static void Main(string[] args)
    {
        List<KeyValuePair<string, string>> sourceElements = new List<KeyValuePair<string, string>>();
        sourceElements.Add(new KeyValuePair<string, string>("t", "t"));
        sourceElements.Add(new KeyValuePair<string, string>("test", "test"));
        sourceElements.Add(new KeyValuePair<string, string>("t1", "t2"));

        if (sourceElements.All(x =>x.Key.Contains("test")))
        {
            // do some stuff here
        }
    }
于 2013-08-05T08:59:28.447 回答
1

此代码应该可以正常工作(在 LINQPad 中不会出错)

List<KeyValuePair<string, string>> sourceElements = new List<KeyValuePair<string, string>>();
sourceElements.Add(new KeyValuePair<string, string>("t","t"));
sourceElements.Add(new KeyValuePair<string, string>("test", "test"));
sourceElements.Add(new KeyValuePair<string, string>("t1", "t2"));

if (sourceElements.All(x => x.Key.ToLowerInvariant().Contains("test")))
{
    // do some stuff here
}

因此,如果您用 t 和 t1 注释掉键,则if-block 中的代码将执行

于 2013-08-05T09:05:32.973 回答