Ik wil graag case insensitive kijken of een element voorkomt in een ListBox en een ComboBox. Nou dacht ik in eerste instantie daarvoor gewoon StringComparison.OrdinalIgnoreCase toe te kunnen voegen aan de call naar Contains, dus zo:
Ondanks dat Linq aan Contains() toevoegt dat je er OrginalIgnoreCase op kunt gebruiken, accepteert ie dit niet, dus blijkbaar voegt Linq dat niet toe aan de Contains functie van deze specifieke datastructuur of zo? Ik ben een C++ programmeur, dus de details van dit soort dingen in C# zijn nog nieuw voor me.
Mijn volgende idee was dus om zelf een functie te schrijven die case insensitive checkt of een element in de lijsten zit. Dat krijg ik echter alleen werkend met twee losse functies voor ListBox en ComboBox:
Het lijkt me duidelijk dat zo dezelfde functie twee keer maken niet cool is. Ik dacht dus iets te kunnen doen met generics of met dat ze allebei overerven van IList of zo, maar dat krijg ik niet compilend. Deze twee werken bijvoorbeeld ook niet:
Dus eigenlijk twee vragen:
1. Waarom werkt Contains op ListBox en ComboBox niet met StringComparison.OrdinalIgnoreCase?
2. Hoe kan ik voorkomen dat ik die functie twee keer moet copy-pasten met verschillende parameters?
Alvast bedankt!
code:
1
2
| mijnListBox.Items.Contains(textBoxName.Text, StringComparison.OrdinalIgnoreCase) mijnComboBox.Items.Contains(textBoxName.Text, StringComparison.OrdinalIgnoreCase) |
Ondanks dat Linq aan Contains() toevoegt dat je er OrginalIgnoreCase op kunt gebruiken, accepteert ie dit niet, dus blijkbaar voegt Linq dat niet toe aan de Contains functie van deze specifieke datastructuur of zo? Ik ben een C++ programmeur, dus de details van dit soort dingen in C# zijn nog nieuw voor me.
Mijn volgende idee was dus om zelf een functie te schrijven die case insensitive checkt of een element in de lijsten zit. Dat krijg ik echter alleen werkend met twee losse functies voor ListBox en ComboBox:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| public static bool containsCaseInsensitive(ListBox.ObjectCollection collection, string text) { //check all the elements in the collection foreach (string element in collection) { if (text.Equals(element, StringComparison.OrdinalIgnoreCase)) { return true; } } //if we get here, then the element was not found return false; } public static bool containsCaseInsensitive(ComboBox.ObjectCollection collection, string text) { //check all the elements in the collection foreach (string element in collection) { if (text.Equals(element, StringComparison.OrdinalIgnoreCase)) { return true; } } //if we get here, then the element was not found return false; } |
Het lijkt me duidelijk dat zo dezelfde functie twee keer maken niet cool is. Ik dacht dus iets te kunnen doen met generics of met dat ze allebei overerven van IList of zo, maar dat krijg ik niet compilend. Deze twee werken bijvoorbeeld ook niet:
code:
1
2
| public static bool containsCaseInsensitive<T>(IList<T> collection, string text) public static bool containsCaseInsensitive<T>(T collection, string text) |
Dus eigenlijk twee vragen:
1. Waarom werkt Contains op ListBox en ComboBox niet met StringComparison.OrdinalIgnoreCase?
2. Hoe kan ik voorkomen dat ik die functie twee keer moet copy-pasten met verschillende parameters?
Alvast bedankt!
Devblog / portfolio
Swords & Soldiers
Awesomenauts
Proun
Cello Fortress