如何检查以下方案集合是否具有某个字符串值?我已经阅读了几个类似的例子,但没有什么能真正帮助我。 非常感谢,
示例我需要的内容
foreach(var item in data.Valuations)
{
if(item.Schemes.Contains("my string")) {
// Do something
}
}
代码
public Valuation[] Valuations { get; set; }
public IEnumerable<string> Schemes
{
get { return this.Values.Keys; }
}
public Dictionary<string, Dictionary<string, double>> Values { get; internal set; }
更新
我设法使用以下代码行完成。
var model = new DetailViewModel
{
model.Data = ...
}
// New bit
model.Data.SelectMany(x => x.Schemes).Where(x => x == "my string");
然而,在查看model.Data时,它还没有应用过滤器。我错过了一些愚蠢的东西吗? 'my string'位于Schemes
中答案 0 :(得分:3)
最有效的方法是使用dictionary class的ContainsKey
方法:
if (Values.ContainsKey("my string"))
{
}
如果您真的想要对IEnumerable<String> Schemes
媒体资源进行操作,那么您只需确保using System.Linq
位于代码顶部,.Contains将完全按照您的问题运作
答案 1 :(得分:1)
使用SelectMany
:
if(Values.SelectMany(x => x.Value.Keys).Any(x => x == "my string"))
{
//do your stuff here
}
这将创建内部词典中所有键的集合,您可以使用后续查询进行搜索,在此示例中使用Any
,如果找到该字符串,则返回true。
答案 2 :(得分:0)
你的意思是这样的:
if(schemes.Any(x=>x=="my string"))
{
// Do something
}
您可以使用LINQ中的Any
来检查是否存在任何元素匹配谓词 - &gt;这里检查是否有任何字符串等于“我的字符串”。
只有在使用Contains
时才能使用Lists
,因此其他解决方案是:
public List<string> Schemes
{
get { return this.Values.Keys.ToList(); }
}
public Dictionary<string, Dictionary<string, double>> Values { get; internal set; }
然后
if(schemes.Contains("my string"))
{
// Do something
}
有效。
但我建议在列表中使用Linq而不是Contains
。