私の質問を説明するより良い方法はこのようなものです
名前に特定の文字列が含まれている人の名前を一覧表示します。たとえば、指定された文字列が「John」の場合、システムは、「John Smith」、「Elton Johns」、「johnny H」など、名前に「John」が含まれるすべての人の名前を表示します。
質問で説明できなかったし、正しい言い回しができないときにGoogleで探しているものを見つけようとするのは難しい
検索で大文字と小文字が区別される場合は、次を使用できますContains
。
var name = "John Smith";
if(name.Contains("John"))
{
// Name contains John
}
または、Johnを含むすべての名前を取得するには:
var names = new string[] {"John Smith", "Bob Smith", "Frank"};
var results = names.Where(n => n.Contains("John"));
大文字と小文字を区別したくない場合は、両方の文字列を小文字に変換できます。
var results = names.Where(n => n.ToLower().Contains("john"));
Contains
拡張メソッドとして、大文字と小文字を区別しない独自の関数を実装することもできます。
public static bool Contains(this string value, string substr, StringComparison c)
{
return value.IndexOf(substr, c) >= 0;
}
次に使用します。
var results = names.Where(n => n.Contains("John", StringComparison.OrdinalIgnoreCase));
IList<string> lst = new List<string>();
lst.add("John Smith");
lst.add("Elton Johns");
lst.add("mark");
lst.add("jones");
名前を取得するには"John"
var resultList = lst.Where(x => x.Contains("John")).ToList();
System.Linq を使用する
private static List<String> GetNames(List<string> names ,string name)
{
return names.Where(x => x.ToLower().Contains(name.ToLower())).ToList();
}
String.ContainsとString.IndexOfがあります。
String.Contains: 指定された String オブジェクトがこの文字列内にあるかどうかを示す値を返します。
String.IndexOf: このインスタンス内で指定された Unicode 文字または文字列が最初に出現した位置のゼロから始まるインデックスを報告します。このインスタンスに文字または文字列が見つからない場合、メソッドは -1 を返します。
Contains
は大文字と小文字が区別されるため、"John" を指定して "johnny H" を検索する場合は、次のように使用することをお勧めしますIndexOf
var key = "John";
var names = new[]{"John Smith", "Elton Johns", "johnny H"};
foreach(var name in names)
if(name.IndexOf(key, StringComparison.InvariantCultureIgnoreCase) > -1) {
// Name contains the key
}
使用する場合は、Contains で名前とキーの両方を適切なカルチャ情報を使用して大文字または小文字に変換する必要があります。
.Containsで文字列をチェクする前に、文字列を大文字 ( .ToUpper ) およびサニタイズ ( .Replace(",", "") ) することも検討する必要があるかもしれません。そうしないと、「 johny H」に「John,」が含まれません。