【问题标题】:How to use .Contains in LINQ using C#如何使用 C# 在 LINQ 中使用 .Contains
【发布时间】:2017-10-07 21:44:49
【问题描述】:

我正在尝试在文件中查找状态子字符串。我打开文件并一次加载每行一个字符串。然后我想检查每个字符串是否包含我的子字符串中的一种状态。它没有按预期工作,因为它一直返回“找不到子字符串”,即使我知道状态在字符串中。我做错了什么?

编辑:我现在意识到错误是什么,这一行完全错误:

if (lines.Any(stringToCheck.Contains))

应该是这样的:

if (stringToCheck.Any(s.Contains))

感谢大家的帮助。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace ConsoleApplication2
{
    class Program
    {
       static void Main (string[] args)
    {

        string[] stringToCheck = {"Alabama","Alaska","Arizona","Arkansas","California","Colorado"}; 

        string[] lines = File.ReadAllLines(@"C:\C# Project\sampledata.dat");
        foreach (string s in lines)
        {
            if (lines.Any(stringToCheck.Contains))
            {
                Console.WriteLine("Found substring");
                Console.WriteLine(s);
                Console.ReadLine();
            }
            else
            Console.WriteLine("Could not find substring");
            Console.WriteLine(s);
            Console.ReadLine() ;
        }


    }
}

}

【问题讨论】:

  • 这一行本身是错误的。 lines.Any(stringToCheck.Contains) 尽管您处于循环中,但您正在遍历所有行,stringToCheck 也不止一个值 - Contains 在这里也可能失败
  • 先看方法stringA.Contains(stringB)。它有什么作用?然后——让我们暂时忘记 string.Contains——Linq 的list.Any(someCriteria) 是做什么的?
  • @Gururaj 您应该将其发布为答案而不是评论。
  • @ScottChamberlain - 我不想开始编写代码,除非他们自己尝试并失败

标签: c# linq substring contains


【解决方案1】:

您可以在状态列表上使用Any 来检查行上包含的每个状态是否有任何字符串。示例:

    if (stringToCheck.Any(x = > s.Contains(x))
    {
      // ...
    }

【讨论】:

    【解决方案2】:

    你可以这样做:

    string[] stringToCheck = { "Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado" };
    
    //Some test lines
    string[] lines = { "sadnaskjd Alabama", "sadasd Arizona", "asdasdaer" };
    
    //A bool telling me if I found anything, 
    //you could skip the bool and just use else in the foreach :)
    bool contains = false;
    
    
    foreach ( var check in stringToCheck )
    {
        if ( lines.Any( l => l.Contains( check ) ) )
        {
            Console.WriteLine( "Found substring" );
            Console.WriteLine( s );
            contains = true;
        }  
    }
    
    if ( contains == false )
    {
        Console.WriteLine("Could not find substring");
        Console.ReadLine();
    }
    

    【讨论】:

      【解决方案3】:

      试试这个想法:

      if (line.Any(x=>CheckKeyWordsInLine(line, stringToCheck)){
           //The line contains one of the keywords
      }else{
           //The line does not contain any of the keywords
      }
      

      然后将CheckKeyWordsInLine函数定义为:

      bool CheckKeyWordsInLine(string line, string[] keywords){
      
       foreach(var key in keywords)
       {
         if(line.Contains(key))
         {
            return true;
         }
       }
       return false;
      }
      

      【讨论】:

        【解决方案4】:

        你可以这样做:

        if(stringToCheck.Any(e => s.Contains(e)){
           //
        }
        

        【讨论】:

          猜你喜欢
          • 2011-08-07
          • 2010-09-16
          • 2011-01-23
          • 1970-01-01
          • 2013-01-22
          • 2015-02-04
          • 1970-01-01
          • 1970-01-01
          • 2014-09-26
          相关资源
          最近更新 更多