huhu,
gerade im hier im Forum gesehen:
string[] strTaskIDArray;
[..]
foreach (Object obj in strTaskIDArray)
{
String val = obj.ToString();
kein krasser Horror, aber naja, evtl. unter Anfängerfehler einzuordnen.
😃
Xynratron
Herr, schmeiss Hirn vom Himmel - Autsch!
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
Ich bin auch kein großer Fan von ==true (wobei ich's auch nicht sonderlich schlimm finde).
@Xynratron:
Wie wär's denn so?
if (b1 == (1 < 10))
{
if (b2 == ("" == string.Empty))
{
reifen += "foo";
}
else
{
reifen += "bar";
}
}
else
{
if (b2 == (Math.Abs(Guid.NewGuid().GetHashCode()) >= 0))
{
reifen += "foo bar";
}
else
{
// to ensure this will not happen...
int i = 1 / (int)(object)0;
}
}
Grüße
Flo
Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+
Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.
Wollt ihr hier den Wettbewerb für obskures C# eröffnen? 👅
Erinnert mich irgendwie an:
using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}
Wollt ihr hier den Wettbewerb für obskures C# eröffnen? 👅
Zwar nicht in C#, aber in T-SQL habe ich da spontan was beizutragen:
Hatte mal mit ein paar Leuten einen kleinen Contest
😄
Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+
Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.
Hallo Scavanger,
Wollt ihr hier den Wettbewerb für obskures C# eröffnen?
nein, zumindest nicht in diesem Thread hier. Aber es gibt einen anderen Thread für genau das: Hello World kompliziert
herbivore
Noch so ein heißer Kandidat, auch wenn nicht so gravierend:
public bool IsAlreadyInUse(string censored)
{
// Indicates if the censored is already in Use
bool isAlreadyInUse = false;
// Loop through each censoredList
foreach (CensoredItem item in censoredList)
{
if (item.Censored == censored)
{
isAlreadyInUse = true;
break;
}
}
// Return the Result
return isAlreadyInUse;
}
Aus Ein-Zeiler mach X-Zeiler
So kann man auch ne Mücke zum Elefanten machen..
Sowas geht auch viel kürzer, indem man eine Contains-Methode in die Collection von censoredList einbaut.
public bool IsAlreadyInUse(string censored)
{
return censoredList.Contains(censored);
}
Noch "schneller" gehts natürlich mit Extension Methods und LINQ 😉
public bool IsAlreadyInUse(string censored)
{
return censoredList.Any(c => c == censored);
}
Original-Bezeichnungen wurden mit "censored" vertauscht.
> Codejunky <
hei junky - so wie ich das sehe fragt er nach einem sub item namens Censored
foreach (CensoredItem item in censoredList)
{
if (item.Censored == censored)
{
ne moeglichkeit das kuezer zu schreiben waere
public bool IsAlreadyInUse(string censored)
{
return censoredList.Any(c => c.Censored == censored);
}
das contains direkt funktioniert nicht
Hallo,
zumidest könnte man die lokale Variable einsparen:
public bool IsAlreadyInUse(string censored)
{
// Loop through each censoredList
foreach (CensoredItem item in censoredList)
{
if (item.Censored == censored)
{
return true;
}
}
return false;
}
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Wie wärs mit:
public bool IsAlreayInUse(string consored)
{
return (from ConsoredItem item in censoredList
where item.Censored == censored
select item).Count() > 0;
}
?
@pdelvo
auch sehr fein -:)
Hänge aber momenta noch auf .NET 2.0, daher "zumindest" 😉
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
oder direkt die kurze syntax:
return censoredList.Where(i => i.Censored == censored).Count() > 0;
Wobei die LINQ-Variante immer die gesamte Liste durchiteriert, auch wenn das Element gleich am Anfang gefunden werden würde, d.h. im Schnitt N statt N/2 Durchläufe.
Und ob man bei der foreach-Schleife mit einer lokalen Variable arbeitet ist nur Geschmackssache (in Bezug auf "nur ein 'return' pro Methode").
Unter C# 3.0 (nicht zu verwechseln mit Target-Framework .NET 2.0 !!! -) würde ich daher auch die Kurzvariante von Mr. Evil mit 'Any' wählen (ich denke, daß Any intern genauso abbrechend arbeitet, wie die handgeschriebene Schleife)...
noch besser (weils nicht die ganze Liste iterieren muss):
return censoredList.Any(i => i.Censored == censored);
loop:
btst #6,$bfe001
bne.s loop
rts
string ddlXValue = (string)ddlX.SelectedValue.ToString();
...
string ddlXValue = (string)ddlX.SelectedValue.ToString();
... Da wollte wohl jemand ganz sicher gehen. 😁
Und das an sehr vielen verschiedenen Stellen 😕
Habe hier gerade ein Projekt was ich weiterführen soll und habe folgenden Code gefunden.
Das Problem was es lösen soll ist das eine Datei eingelesen werden soll. Diese enthält eine Seriennummer die in ein Label eingetragen werden soll. Sprich, einfaches Parsing.
if (File.Exists(swFile.FullName))
{
int tmpCounter = 0;
StreamReader txtReader = File.OpenText("tmp/file.txt");
string tmp = String.Empty;
while ((tmp = txtReader.ReadLine()) != null)
{
if (tmpCounter == 1)
this.[B]label9[/B].Text = tmp;
tmpCounter++;
}
txtReader.Close();
}
Das komplette Projekt durch wurden die Steuerelemente nicht benannt, sprich nur die automatischen Namen übernommen 🙁
Das ganze konstrukt ist in meinen Augen schon horror (aber sehr weit verbreiteter). Aus dem mache man:
if (!File.Exists(swFile.FullName))
throw new FileNotFoundException("Bla"); // alternativ return;
int tmpCounter = 0;
StreamReader txtReader = File.OpenText("tmp/file.txt");
string tmp = String.Empty;
while ((tmp = txtReader.ReadLine()) != null)
{
if (tmpCounter != 1)
continue;
this.label9.Text = tmp;
tmpCounter++;
}
txtReader.Close();
Jetzt mal ohne irgendwas außer einigen Bedingungen zu änder finde ich das viel schöner (Macht bei dem Beispiel jetzt nicht so viel aus aber man stelle sich das mal in einer verschachtelten Schleife mit zig Bedingungen vor). Lieber prüfen ob was nicht passt als prüfen ob es passt. Das setzt halt in den meisten Fällen voraus das man kleinere Methoden macht.
// ... int tmpCounter = 0; // ... while (/*...*/) { if (tmpCounter != 1) continue; // ... tmpCounter++; } // ...
So wird tmpCounter
aber nie inkrementiert... :evil:
Das hier ist ein Neighbour-Joining-Algorithmus für phylogenetische Bäume.... mit sowas muss man sich als Student rumschlagen... schlimm genug.... aber wenn die Kommilitonen dann so einen Code produzieren wird es pervers...
private static BinaryTree neighbourJoin (List<List<String>> list) {
BinaryTree resTree=null;
//Iteration des Algorithmuss
for (int u=0;u<list.size ()-1;u++){
//list kopieren nach oldlist
List<List<String>> oldlist = new ArrayList<List<String>> ();
for (int i =0;i<list.size ();i++){
oldlist.add (new ArrayList<String> ());
for (int k=0;k<list.size ()-1;k++){
oldlist.get (i).add (new String (list.get (i).get (k)));
}
}
// Nettodivergenz Schritt1
System.out.println ("Schritt 1 Matrix"+list);
Map<String, Double> nettodivergenz = new HashMap<String, Double> ();
double nettodiv = 0.0;
double nettodivsum = 0.0;
int j = 0;
for (int i = 1; i < list.size (); i++) {
nettodivsum = 0.0;
for (int k = 0; k < list.size () - 1; k++) {
nettodivsum += Double.parseDouble (list.get (i).get (k));
}
nettodiv = (1.0 / (list.size () - 1 - 2) * nettodivsum);
nettodivergenz.put (list.get (0).get (j), nettodiv);
j++;
}
System.out.println ("Schritt 1 Nettodovergenz: "+nettodivergenz);
//Schritt 2
List<List<String>> zwischenMatrix = new ArrayList<List<String>> ();
double zMvalue = 0.0;
for (int i = 1; i < list.size (); i++) {
List<String> innerList = new ArrayList<String> ();
for (int k = 0; k < list.size () - 1; k++) {
if (i - 1 == k) {
zMvalue = 0.0;
innerList.add (String.valueOf (zMvalue));
} else {
zMvalue = Double.parseDouble (list.get (i).get (k))
- (nettodivergenz.get (list.get (0).get (i - 1))
+ nettodivergenz.get (list.get (0).get (k)));
innerList.add (String.valueOf (zMvalue));
}
}
zwischenMatrix.add (innerList);
}
System.out.println ("Schritt 2 ZwischenMatrix: "+zwischenMatrix);
// Schritt 3
double min = Double.parseDouble (zwischenMatrix.get (0).get (0));
List<Number> minVals = new ArrayList<Number> ();
for (int i = 0; i < zwischenMatrix.size (); i++) {
for (int k = 0; k < zwischenMatrix.size (); k++) {
if (Double.parseDouble (zwischenMatrix.get (i).get (k)) < min) {
min = Double.parseDouble (zwischenMatrix.get (i).get (k));
minVals.add (min);
minVals.add (i);
minVals.add (k);
}
}
}
double disij=Double.valueOf (list.get ((Integer)minVals.get (1)+1).get ((Integer)minVals.get (2)));
String iij = list.get (0).get ((Integer)minVals.get (1));
String jij = list.get (0).get ((Integer)minVals.get (2));
String ij = iij+jij;
double disiij= (disij+nettodivergenz.get (iij)
-nettodivergenz.get (jij))/2;
double disjij= (disij+nettodivergenz.get (jij)
-nettodivergenz.get (iij))/2;
System.out.println ("Schritt 3 MinVal: " +minVals);
System.out.println ("Schritt 3 "+ij+" zu "+iij+" "+disiij);
System.out.println ("Schritt 3 "+ij+" zu "+jij+" "+disjij);
//--> Teilbaum erzeugen
BinaryTree t = Graphs.leaf (iij);
BinaryTree t1 = Graphs.leaf (jij);
BinaryTree combined = t.concat (t1,disiij, disjij);
System.out.println ("Schritt 3 Teilbaum: "+combined);
//Schritt 4
list.remove ((Integer)minVals.get (2)+1);
list.remove ((Integer)minVals.get (1)+1);
for (int i=0;i<list.size ();i++){
int a = (Integer)minVals.get (2);
int b = (Integer)minVals.get (1);
list.get (i).remove (a);
list.get (i).remove (b);
}
System.out.println ("Schritt 4 Löschung: "+list);
List<String> duklist = new ArrayList<String> ();
for (int i=1;i<list.size ();i++){
double dik=Double.valueOf (oldlist.get ((Integer)minVals.get (2)+1).get (i+1));
double djk=Double.valueOf (oldlist.get ((Integer)minVals.get (1)+1).get (i+1));
double dij=Double.valueOf (oldlist.get ((Integer)minVals.get (1)+1).get ((Integer)minVals.get (2)));
double duk= (dik+djk-dij)/2;
duklist.add (String.valueOf (duk));
}
duklist.add (String.valueOf (0.0));
int s = list.size ();
list.get (0).add (ij);
for (int i=0;i<s+1;i++){
if (i==s)list.add (duklist);
if (i>0&&i<s)list.get (i).add (duklist.get (i-1));
}
System.out.println ("Schritt 4 duklist: "+duklist);
System.out.println ("Schritt 4 Ergebnisliste: "+list);
//Teilbaum erzeugen Teil 2
if (resTree==null)resTree=combined;
else if (list.size ()-1==2){
resTree=resTree.concat (combined,Double.valueOf (duklist.get (0))/2);
}else{
resTree=resTree.concat (combined,disij);
System.out.println (resTree);
}
}
return resTree;
}
@Schamese
Uh, eiskalt erwischt. X(
peinlich, peinlich... 😉
Habe hier gerade ein Projekt was ich weiterführen soll und habe folgenden Code gefunden.
Das Problem was es lösen soll ist das eine Datei eingelesen werden soll. Diese enthält eine Seriennummer die in ein Label eingetragen werden soll. Sprich, einfaches Parsing.
if (File.Exists(swFile.FullName)) { int tmpCounter = 0; StreamReader txtReader = File.OpenText("tmp/file.txt"); string tmp = String.Empty; while ((tmp = txtReader.ReadLine()) != null) { if (tmpCounter == 1) this.[B]label9[/B].Text = tmp; tmpCounter++; } txtReader.Close(); }
Das komplette Projekt durch wurden die Steuerelemente nicht benannt, sprich nur die automatischen Namen übernommen 😦
Wenn nur die 2. Zeile der Datei eingelesen werden soll, dann kann die Schleife danach doch auch sofort mit 'break' verlassen werden. Geschweige denn, daß die Methode nur die Seriennummer zurückliefern sollte und nicht direkt in die Controls reinschreiben sollte.
Und zu Corpsegrinder's Code:
man sollte dem Kommilitonen mal ein Wörterbuch schenken
... des Algorithmuss
Dann doch eher: "des Algorithmuses" 😜
Und seit wann ist 'ArrayList' ein Generic?
List<List<String>> oldlist = new ArrayList<List<String>> ();
Und insgesamt ist das doch toller Code: imperative Programmierung mit einer objektorientierten Sprache!
Und seit wann ist 'ArrayList' ein Generic?
List<List<String>> oldlist = new ArrayList<List<String>> ();
In Java ist ArrayList ein Generic 😉
Ups, ja. System.out.println ist eindeutig Java, aber oberflächlich hätte es auch C# sein können (aber alle Methoden sind ja mit kleinem Anfangsbuchstaben (igitt!) und bis auf ArrayList<> eben -)
for (int i = 0; i < intcount; i++)
{
if (intcount - i - 1 > 0)
{
[...]
}
}
grad in altem code von mir gefunden, peinlich peinlich ...
Na super und ich werde ab heute gewzungen bei uns in der Firma folgendes zu schreiben:
bool b = true;
if (b == true) //Warum ver#$@! noch mal darf ich nicht mehr if (b) schreiben!? *KOTZ*
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
if (value != null)
{
throw new ArgumentNullException("...");
}
Den Fehler (der nicht von mir stammt) zu finden hat mich neulich ca 30 Minuten gekostet.
There are 10 kind of people, those who understand binary and those who don't.
bool b = true; if (b == true) //Warum ver#$@! noch mal darf ich nicht mehr if (b) schreiben!? *KOTZ*
Vielleicht weil Dein Chef zu wenig lange in der Baumschule war 😃
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Bei uns in der Firma heißt es zwar nach offiziellen Coding-Richtlinien, dass con == true nicht verwendet werden soll, aber insbesondere die Kollegen aus Bratislava bauen es ein mit der Argumentation, dass sich dann die Mitarbeiter aus der Customer Service Abteilung besser zurechtfinden im Code.
Ich frag mich da immer, wenn die Leute schon bei IF-Bedingungen Hilfe brauchen, werden sie kaum den restlichen Code verstehen.
As a man thinketh in his heart, so he is.
Hallo zusammen,
das Thema == true oder nicht hat durchaus einiges Potenzial für lange und gleichzeitig unfruchtbare Diskussionen. Deshalb sollten wir dabei belassen, dass zumindest im Rahmen dieses Forums die Empfehlung zu dem Thema, die in [Tipp] Anfängerfehler == true / == false ausgeführte ist. Dass einige Firmen oder einzelne Programmierer das anders handhaben, finde ich wie meine beiden Vorredner befremdlich, aber deshalb steht es ja auch hier unter "Coding Styles Horror". 😃 Damit sollten wir es gut sein lassen.
herbivore
Hallo,
neulich gesehen:
public void Abort()
{
// ...
throw new BadCodingException("Do not abort threads manually!");
}
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo,
leider hatte ich keine Gelegenheit, mir diese Perle im Original zu kopieren. Also aus dem Gedächtnis etwas schematisch - hätte ich's nicht selbst gesehen, hätte ich es wohl nicht für möglich gehalten.
class c1 {
...
void Send(c1 c, byte[] cmd, String strIP, String strPort) {
c=this;
int iPort=Convert.ToInt32(strPort);
IPEndPoint ipe=new IPEndPoint(IPAddress.Parse(strIP), iPort);
c.Sender.Sender.Send(cmd, cmd.Length, ipe);
}
...
}
class Window1 : Window {
c1 c;
...
void Send(byte[] cmd) {
...
String IP=c.Sender.Sender.IPSender.Address.ToString();
String Port=c.Sender.Sender.IPSender.Port.ToString();
...
c.Send(c, cmd, IP, Port);
...
}
...
}
Zudem handelt es sich nicht mal um ein Einzelstück - in dem Code war/ist noch mehr davon. Begleitet von ganz vielen ToString() - unabhängig vom Datentyp, also auch bei Strings - sicher ist sicher.
Hallo,
?( ich kann nur sagen: Fantastisch.
Da muss man erst mal drauf kommen ⚠
Gruß, MarsStein --> amüsiert
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Hallo,
es gab noch eine Variante unter Einbeziehung von Klassenmembern. Natürlich in der Folge mit schwer zu findenden Bugs. Aber das war so abstrus, dass es hier zu viel Code gewesen wäre bzw. ich mir hätte sinngemäß neu ausdenken müssen.
Wenn's wenigstens "nur" ein Praktikant gewesen wäre, bestünde vielleicht noch Hoffnung...
public bool Methode1(string parameter) { ... }
public void Methode2(string parameter)
{
//...
if (Methode1(parameter).ToString() == "False")
{
//...
}
//...
}
Wer lässt sich denn sowas einfallen? 😁
Ich nutz zukünftig auch die ToString() Methode für sowas.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Wie geil 😁
Aber wichtig, erst ein ToLower() ausführen und gegen "false" vergleichen, ist sicherer 😁
Hallo CSL,
und bei der Prüfung am besten noch ein == true
hinten dranhängen, um zu sehen, ob der Vergleich erfolgreich war.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Quatsch!
Folgendermaßen:
if(Convert.ToBoolean(Convert.ToBoolean(Methode1(parameter).ToString()) == false).ToString()) == true)
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
edit: Code als CSharp-Blöcke markiert
bei uns seit neuestem:
CheckForIllegalCrossThreadCalls = false
(In jedem Form und Control)
und
if (b==true)
wenn ich das wirklich machen muss, werd ich ab jetzt überall (wenn b ein Wert sein sollte) auch schreiben:
if (b > 5 == true)
usw.
So ein Quatsch.
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
FileStream fs = new FileStream("Eine wohl noch nicht erstellte Datei", FileMode.Append);
fs.Close();
StreamWriter sw = new StreamWriter("die selbe Datei", true, Encoding.ASCII);
sw.Write("...");
sw.Close();
Ohne Worte 😁
using Skill
Das Teil hab ich in einem Perl Modul gefunden, dass ein Arbeitskollege geschrieben hat.
$myvar->{'events'} = $myvar->{'events'} if(!defined $myvar->{'events'});
Versteh ich so wenig von Perl oder macht dieser Code überhaupt keinen Sinn?
Was hat denn if(...); für eine Wirkung? :S
using Skill
Der Code macht doch an folgender Stelle schon keinen Sinn.
$myvar->{'events'} = $myvar->{'events'}
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Ich glaube, dass ist so wie bei Ruby wo du am Ende einer Anweisung when oder if anhängen kannst und die Zuweisung von der Bedingung abhängt. In dem Fall ist es doppelt toll, da die definierten Events an die definierten Events zugewiesen werden wenn sie definiert sind.
As a man thinketh in his heart, so he is.
Also manchmal platz mir fast der Kragen...
Ich hab grad einen "Bug-Fix" von einem unserer Entwickler bekommen.
Das Teil lief eigentlich ohne Probleme, nur bei einer Berechnung war ein Fehler...
und dann sowas und noch dazu 2 Mal...
(ist zwar PHP dennoch muss man sowas herzeigen) 😁
[php]
while($shopitemid=$shop_article_item->getShopArticleItem_ID()){
$shop_price = new DB_ShopPrice();
//.... tut noch ein paar Sachen...
}else{
$message = "...ErrorMessage...";
$pearlogger->log($message, PEAR_LOG_ERR);
}
[/php]