そのようなリストがあり、このリスト内で別の文字列からの部分文字列を検索できるようにしたいと思います。例:
List<string> list = new List<string>();
string srch = "There";
list.Add("1234 - Hello");
list.Add("4234 - There");
list.Add("2342 - World");
リスト内で"There"
を検索し、"4234 - There"
を返します。私はもう試した:
var mySearch = list.FindAll(S => s.substring(srch));
foreach(var temp in mySearch)
{
string result = temp;
}
Linqでは、最初の結果を取得するだけです。
string result = list.FirstOrDefault(s => s.Contains(srch));
Linqなしでこれを行うには(たとえば、.NET 2.0などの以前の.NETバージョンの場合)、List<T>
のFindAll
メソッド。この場合、検索語を含むリスト内のすべてのアイテムを返します。
var resultList = list.FindAll(delegate(string s) { return s.Contains(srch); });
すべてのエントリを返すには:
IEnumerable<string> result = list.Where(s => s.Contains(search));
最初のもののみ:
string result = list.FirstOrDefault(s => s.Contains(search));
あなたが書いたものがコンパイルエラーの原因になります
「string.Substring(int)」に最適なオーバーロードメソッドの一致には、無効な引数があります
部分文字列は、結果の文字列の文字位置や長さを使用して文字列の一部を取得するために使用されます。
たとえば、srch.Substring(1, 3)
は文字列「her」を返します
他の人が言及したように、ある文字列が別の文字列内にあるかどうかを示すContains
を使用する必要があります。実際の位置を知りたい場合は、IndexOf
を使用します
indexOfまたはcontainsを使用したい
someString.IndexOf("this");
someString.Contains("this");
CaseSensitive
の場合:
YourObj yourobj = list.FirstOrDefault(obj => obj.SomeString.ToLower().Contains("some substring"));
OR
YourObj yourobj = list.FirstOrDefault(obj => obj.SomeString.ToUpper().Contains("some substring"));
私がしなければならなかった同じ問題。
あなたにはこれが必要です:
myList.Where(listStrinEntry => myString.IndexOf(listStringEntry) != -1)
どこ:
myList
はList<String>
には、myString
が任意の位置に含める必要がある値があります
つまり、myStringにリストのエントリのいずれかが含まれている場合は事実上検索します。これがあなたの望むものであることを望みます...