在我的代码中,我有“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
}
但是编译器报告“无法从使用中推断出类型参数”。
代码中哪些内容不正确的想法?
答案 0 :(得分:1)
if语句不应该是:
if(sourceElements.All(x => x.Key.ToLowerInvariant().Contains("test"))
{
// do some stuff here
}
Contains
将返回true
或false
,而不是整数。
答案 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
- 块中的代码将执行