2017-05-09 57 views
0

我正試圖在文件中查找狀態的子字符串。我打開文件並一次加載每行一個字符串。然後我想檢查每個字符串是否包含我的子字符串中的某個狀態。它不按預期工作,因爲它一直返回「無法找到子字符串」,即使我知道狀態在字符串中。我究竟做錯了什麼?如何使用.Contains在LINQ中使用C#

編輯:我知道現在是什麼錯誤,這條線是完全錯誤的:

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() ; 
     } 


    } 
} 

}

+2

這條線本身是錯誤的。 lines.Any(stringToCheck.Contains) 你正在遍歷所有行,雖然你在一個循環也stringReCheck是多個值 - 包含可能會失敗,以及 – Gururaj

+0

首先看看'stringA.Contains( stringB)'。它有什麼作用?然後 - 讓我們忘記一下string.Contains - Linq的「list.Any(someCriteria)」是做什麼的? – elgonzo

+0

@Gururaj你應該發佈,作爲一個答案,而不是評論。 –

回答

3

你可以使用Any在狀態上的列表,以檢查是否有任何字符串針對包含上線每個狀態。對於樣本:

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

你可以做這樣的事情:

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

你可以做這樣的事情:

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(); 
} 
0

嘗試這種想法:

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; 
}