0

如何检查以下方案集合是否具有某个字符串值?我读过几个类似的例子,但没有什么能真正帮助我。非常感谢,

举例我需要什么

    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 时,它没有应用过滤器。我错过了什么愚蠢的东西吗?“我的字符串”位于方案中

4

3 回答 3

3

最有效的方法是使用字典类ContainsKey的方法:

if (Values.ContainsKey("my string")) 
{

}

如果您真的想对您的IEnumerable<String> Schemes财产进行操作,那么您只需确保它using System.Linq位于代码的顶部,并且.Contains将完全按照您的问题工作。

于 2013-09-17T12:33:54.867 回答
1

尝试使用 linq SelectMany

if(Values.SelectMany(x => x.Value.Keys).Any(x => x == "my string"))
{
   //do your stuff here
}

这将创建内部字典中所有键的集合,在此示例中,您可以使用后续查询进行搜索 -Any如果找到字符串,则返回 true。

于 2013-09-17T12:33:04.167 回答
0

你的意思是这样的:

    if(schemes.Any(x=>x=="my string")) 
    {
       // Do something
    }

您可以使用Anyfrom LINQ 检查是否有任何元素匹配谓词-> 此处检查是否有任何字符串等于“我的字符串”。

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列表。

于 2013-09-17T12:32:33.990 回答