使用“contains”查询C#</key-value>中的列表<key-value>

时间:2013-08-05 08:53:08

标签: c# visual-studio-2010 linq .net-4.0 .net-4.5

在我的代码中,我有“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 个答案:

答案 0 :(得分:1)

if语句不应该是:

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

Contains将返回truefalse,而不是整数。

答案 1 :(得分:1)

这里的问题是Contains上没有方法String采用这些参数类型。 Contains只有一个重载,它只需要一个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;
}

答案 2 :(得分: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
        }
    }

答案 3 :(得分: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 - 块中的代码将执行