2017-09-28 31 views
0

我想比較字符串列表中的字符串,我想使用「IgnoreSymbols」比較選項。沒有「foreach」字符串列表的方法嗎?比較使用忽略符號的字符串列表中的字符串沒有foreach

List<string> lstString = new List<string> { "Hello [T]", "XYA" }; 
string str = "Hello (T)"; 

var Y = String.Compare(str, lstString.Any(e => e.ToString()), CultureInfo.InvariantCulture, CompareOptions.IgnoreSymbols); 

if (Y == 0) 
{ 
    Console.WriteLine("equal"); 
} 

回答

4

您可以使用LINQ,一般你接近你的想法,你只需要切換AnyString.Compare

像這樣:

var y = lstString.Any(e => string.Compare(str, e, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.CompareOptions.IgnoreSymbols) == 0); 
4

從我個人理解,你想知道如果列表中包含一個字符串,這等於搜索字符串(str),忽略符號。
您可以使用Any

var lstString = new List<string> { "Hello [T]", "XYA" }; 
var str = "Hello (T)"; 

var Y = lstString.Any(s => String.Compare(s, str, CultureInfo.InvariantCulture, CompareOptions.IgnoreSymbols) == 0); 

if (Y) 
{ 
    Console.WriteLine("Found"); 
} 
2

這是你在找什麼?你可以使用投影並做任何你想要的。

List<string> lstString = new List<string> { "Hello [T]", "XYA" }; 
string str = "Hello (T)"; 

var Y = lstString.Select(e => String.Compare(str, e, CultureInfo.InvariantCulture, CompareOptions.IgnoreSymbols)); 

if (Y.Contains(0)) 
{ 
    Console.WriteLine("equal"); 
} 

或者

List<string> lstString = new List<string> { "Hello [T]", "XYA" }; 
string str = "Hello (T)"; 

var Y = lstString.Any(e => String.Compare(str, e, CultureInfo.InvariantCulture, CompareOptions.IgnoreSymbols) == 0); 

if (Y) 
{ 
    Console.WriteLine("equal"); 
} 

與@Bojan乙建議:)謝謝:)編輯

+1

最終,您可以直接在列表中使用「任意」,而不是使用「選擇」,然後使用「任何」,它提高了可讀性,性能也如此(我認爲)。但這兩個選項返回正確的結果 –

+0

感謝@BojanB :)編輯。我通常使用R#來通知我這件事,但是因爲我使用了[.NET Fiddle](https://dotnetfiddle.net/),所以直到你出現之前,我都是自己的。 – rmjoia

1

您可以使用此 -

var result = lstString.Any(x => Regex.Replace(x, @"[^0-9a-zA-Z]+", "").Equals(Regex.Replace(str, @"[^0-9a-zA-Z]+", ""))); 
if(result) 
{ 
    // Write code here 
} 

但看詳細我認爲使用foreach或寫入會導致相同的執行時間,如果你是從foreach環斷裂。