| 

.NET C# Java Javascript Exception

4
Gibt es einen kürzeren weg folgendes abzufragen

if(A != B && A != C && A != D &&...)
News:
10.09.2009
Jesman 73 4
A,B,C sind string oder numerisch?
Damengummistiefel 10.09.2009
A,B,C sind Objekte, also könnten auch Strings sein oder numerisch
Jesman 10.09.2009
3 Antworten
6
Mit folgendem Code sollte es gehen:

using System.Linq;
(...)
//Mit Objekten:
Object A = ?;
if(!(new Object[] {B,C,D}).Contains(A))

//Mit Strings:
String A = "Hallo";
if(!(new String[] {B,C,D}).Contains(A))
if(!(new String[] {"Hallo","ABC","D66"}).Contains(A))
if(!(new String[] {"Hallo","ABC","D66"}).Contains("Hallo"))
10.09.2009
Floyd 14,6k 3 9
Danke genau sowas meinte ich :)
Jesman 10.09.2009
1
Noch eine Anmerkung: .. bei selbst definierten Klassen kann es notwendig sein das IComparable-Interface zu Implementieren um 2 Objekte die nicht die selbe Instanz repräsentieren zu vergleichen. In dem Fall kann ansonsten das 1. Beispiel "if(!(new Object[] {B,C,D}).Contains(A))" false liefern, weil die Instanzen verglichen werden.
Floyd 10.09.2009
2
Du könntest alle Werte die nicht vorkommen sollen in ein Array packen
und dann in der if-Abfrage prüfen, ob der Wert der Variable irgendwo
in diesem Array vorkommt.
Dann müßtest Du halt nur einmal den ganzen Salat aufschreiben
und nicht bei jeder if-Abfrage.
10.09.2009
lunatigs 1,3k 2 8
lunatigs 1,3k 2 8
Wenns noch besser sein soll, geht das sicher auch über RegEx. Bin mir sicher, daß da auch noch einer was zu schreiben kann.
lunatigs 10.09.2009
Da müßte ich dann ja aber mit ner SChleife das Array durchlaufen? Das wird nicht kompakter, wenn ich erst jedesmal die Werte ins Array packe und dann das in ner schleife durchlaufe
Jesman 10.09.2009
Wenn es jedes Mal unterschiedliche Werte sind, haste da Recht. Die Schleife könnte man sich sparen, wenn man sich eine Funktion baut, wie z.B. in_array() unter PHP.
lunatigs 10.09.2009
1
Hallo Jesman,

da es sich um alles handeln kann, also auch um Objekte
mit nichttrivialer Vergleichbarkeit, würde ich annehmen,
daß es keine simple Lösung dafür gibt - es sei
denn, man erzeug jedesmal ein Array, Collection etc.
(Dies würde imho dem 'KISS'-Prinzip widersprechen).

Ich könnte mir höchstens Vorstellen, eine
Funktion mit variabler Argumentzahl zu
bauen und dort jeweils alles reinzuschreiben:

<pseudo>

if( compare_first(A, "different_all", B, C, D) ) {
// A ist anders als alle
}

if( compare_first(A, "equal_any", B, C, D) ) {
// A ist gleich zu irgendeinem
}

if( compare_first(A, "less", B, C, D) ) {
// A ist am kleinsten
}

if( compare_first(A, "greater", B, C, D) ) {
// A ist am größten
}


Oder so etwa (mit entsprechendem Namen und eventuell Enums
statt "Instruktions-Strings"), denn es geht ja darum, den
Code übersichtlich und verständlich zu halten.

Viele Grüße
10.09.2009
Damengummistiefel 377 1 6

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH