Jag har lite problem med en sökfunktion jag jobbar på. Tanken är att man ska kunna söka igenom en massa objekt som innehåller attribut i form av strängar.
Jag loopar igenom mina objekt och använder String.IndexOf("min söksträng") för att se om objektets attribut innehåller söksträngen.
Problemet med detta är att String.IndexOf inte verkar vilja ta svenska tecken. Så fort jag använder ett svenskt tecken i söksträngen så resulterar det i att jag inte får några träffar. Trotts att jag vet att det finns objekt som passar.
Någon som har något tips på en lösning/vad som kan vara fel?
Kolla i debuggern så de verkligen har samma innehåll, dvs att det är samma sorts strängar med samma teckenuppsättning, så inte bara den ena är unicode, exempelvis. När du tittar på variabler i debuggern borde du få upp deras äkta innehåll, byte för byte.
Jag har lyckats köra debuggingen så långt att jag fick fram värdena som låg i objekten. Det jag inte lyckas med är att se är om värdena är av unicode-typ eller inte.
Jag är lite färsk på debugging så jag kanske kan få en hint om hur man kan se det :D
Kolla på "culture, comparing data" i hjälpen så ser du hur du ska lösa problemet. Det handlar om att sätta rätt kultur så att strängar jämförs på rätt sätt.
Jag har läst på lite mer i hjälpen nu och framförallt kollat på CultureInfo-klassen. Jag har testat att göra om min kod lite men utan att få det att fungera.
Exempel på min gamla metod
string Attribute = "Mitt attribut i objektet";
string SearchParam = "Min söksträng";
int result1 = Attribute.IndexOf(SearchParam)
Som det ser ut nu:
CultureInfo ci= new CultureInfo("sv-SE");
string Attribute = "Mitt attribut i objektet";
string SearchParam = "Min söksträng";
int result1 = ci.CompareInfo.IndexOf(ArtAttribute, SearchParam, CompareOptions.IgnoreCase);
using System;
using System.Globalization;
public class Test {
public static void Main(string[] args) {
CultureInfo ci= new CultureInfo("sv-SE");
string Attribute = "Hej din gamle häst";
string SearchParam = "häst";
int result = ci.CompareInfo.IndexOf(Attribute, SearchParam, CompareOptions.IgnoreCase);
Console.WriteLine("Result: {0}", Attribute.Substring(result, SearchParam.Length));
}
}
Men jag har inga problem att jämföra strängar som innehåller svenska tecken. Följande fungerar: