384 Stimmen

Was ist der schlimmste Fehler in C# oder .NET?

Ich habe kürzlich mit einem DateTime Objekt, und schrieb etwas wie dieses:

DateTime dt = DateTime.Now;
dt.AddDays(1);
return dt; // still today's date! WTF?

Die Intellisense-Dokumentation für AddDays() sagt, dass es einen Tag zum Datum hinzufügt, was nicht der Fall ist - es devuelve ein Datum mit einem hinzugefügten Tag, also müssen Sie es so schreiben:

DateTime dt = DateTime.Now;
dt = dt.AddDays(1);
return dt; // tomorrow's date

Dies hat mich schon einige Male gebissen, also dachte ich, es wäre nützlich, die schlimmsten C#-Fehler zu katalogisieren.

158 Stimmen

Return DateTime.Now.AddDays(1);

24 Stimmen

Soweit ich weiß, sind die eingebauten Werttypen alle unveränderlich, zumindest insofern, als jede Methode, die mit dem Typ verbunden ist, ein neues Element zurückgibt, anstatt das vorhandene Element zu verändern. Zumindest fällt mir spontan kein Typ ein, der dies nicht tut: alles schön und konsistent.

1 Stimmen

Community-Wiki, so viel Spam in SO jetzt. Wenn Fragen subjektiv sind (keine endgültige Antwort), sollte es Community Wiki sein.

5voto

Shaul Behr Punkte 35201

Oracle-Parameter müssen der Reihe nach hinzugefügt werden

Dies ist ein großer Fehler in der ODP.Net-Implementierung von parametrisierten Abfragen für Oracle.

Wenn Sie einer Abfrage Parameter hinzufügen, sind die Parameternamen standardmäßig ignoriert und die Werte werden in der Reihenfolge verwendet, in der sie hinzugefügt wurden.

Die Lösung ist die Einstellung der BindByName Eigenschaft der OracleCommand Objekt zu true - Es ist false standardmäßig... was qualitativ (wenn auch nicht ganz quantitativ) in etwa so ist, als hätte man eine Eigenschaft namens DropDatabaseOnQueryExecution mit einem Standardwert von true .

Sie nennen es ein Merkmal ; Ich nenne es eine Grube im öffentlichen Raum .

Véase aquí für weitere Einzelheiten.

5voto

Mahdi Tahsildari Punkte 12447
enum Seasons
{
    Spring = 1, Summer = 2, Automn = 3, Winter = 4
}

public string HowYouFeelAbout(Seasons season)
{
    switch (season)
    {
        case Seasons.Spring:
            return "Nice.";
        case Seasons.Summer:
            return "Hot.";
        case Seasons.Automn:
            return "Cool.";
        case Seasons.Winter:
            return "Chilly.";
    }
}

Fehler?
nicht alle Codepfade geben einen Wert zurück ...
Willst du mich verarschen? Ich wette, alle Codepfade geben einen Wert zurück, weil jeder Seasons Mitglied wird hier erwähnt. Es hätte alle Enum-Mitglieder prüfen sollen, und wenn ein Mitglied in Schaltfällen fehlte, dann wäre ein solcher Fehler sinnvoll, aber jetzt sollte ich eine Default Fall, der überflüssig ist und vom Code nie erreicht wird.

EDIT :
Nach weiteren Recherchen zu diesem Gotcha kam ich zu folgenden Ergebnissen Eric Lippert's gut geschriebener und nützlicher Beitrag aber es ist trotzdem irgendwie seltsam. Sind Sie einverstanden?

5voto

GWLlosa Punkte 23282

Mein bisher schlimmstes Problem habe ich erst heute herausgefunden... Wenn Sie object.Equals(object obj) überschreiben, können Sie am Ende feststellen, dass:

((MyObject)obj).Equals(this);

verhält sich nicht so wie:

((MyObject)obj) == this;

Die eine ruft Ihre überschriebene Funktion auf, die andere nicht.

5voto

jcollum Punkte 39638

Ich muss mich immer wieder daran erinnern, dass DateTime ein Wertetyp ist und kein Ref-Typ. Das erscheint mir einfach zu seltsam, vor allem in Anbetracht der Vielzahl von Konstruktoren für diesen Typ.

5voto

Sowohl für LINQ-to-SQL als auch für LINQ-to-Entities

return result = from o in table
                where o.column == null
                select o;
//Returns all rows where column is null

int? myNullInt = null;
return result = from o in table
                where o.column == myNullInt
                select o;
//Never returns anything!

Es gibt einen Bug-Report für LINQ-to-Entites aquí Allerdings scheinen sie dieses Forum nicht oft zu besuchen. Vielleicht sollte jemand auch ein Forum für LINQ-to-SQL einrichten?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X