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.

4voto

VisibleChanged es normalerweise nicht genannt wenn sich Sichtbar ändert.

4voto

Benjol Punkte 60397

Die rekursive Eigenschaft gotcha

Ich glaube, das ist nicht spezifisch für C#, und ich bin mir sicher, dass ich es an anderer Stelle in SO erwähnt gesehen habe ( este ist die Frage, die mich daran erinnert hat)

Es kann auf zwei Arten geschehen, aber das Endergebnis ist das gleiche:

Vergessen einer Referenz base. wenn eine Eigenschaft überschrieben wird:

 public override bool IsRecursive
 {
     get { return IsRecursive; }
     set { IsRecursive = value; }
 }

Wechsel von Auto- zu Backed-Eigenschaften, aber noch nicht ganz durchgängig:

public bool IsRecursive
{
    get { return IsRecursive; }
    set { IsRecursive = value; }
}

3voto

kentaromiura Punkte 6369

Das Schlimmste, was mir passiert ist, war das webBrowser documentText Problem:

Enlace

die AllowNavigation-Lösungen funktionieren in Windows-Formularen...

aber im kompakten Rahmen gibt es diese Eigenschaft nicht...

...bisher war die einzige Abhilfe, die ich gefunden habe, die Browsersteuerung neu zu erstellen:

http://social.msdn.microsoft.com/Forums/it-IT/netfxcompact/thread/5637037f-96fa-48e7-8ddb-6d4b1e9d7db9

Aber dabei müssen Sie den Browserverlauf in den Händen halten ... :P

3voto

Shaul Behr Punkte 35201

Linq-To-Sql und die Zweideutigkeit zwischen Datenbank und lokalem Code

Manchmal kann Linq einfach nicht herausfinden, ob eine bestimmte Methode auf der DB oder im lokalen Code ausgeführt werden soll.

Véase aquí y aquí für die Problemstellung und die Lösung.

2voto

Shaul Behr Punkte 35201

Zugehöriges Objekt und Fremdschlüssel sind nicht synchronisiert

Microsoft hat diesen Fehler zugegeben .

Ich habe eine Klasse Thing die eine FK zu Category . Die Kategorie hat keine definierte Beziehung zu Thing, um die Schnittstelle nicht zu verschmutzen.

var thing = CreateThing(); // does stuff to create a thing
var category = GetCategoryByID(123); // loads the Category with ID 123
thing.Category = category;
Console.WriteLine("Category ID: {0}", thing.CategoryID); 

Sortie :

Category ID: 0

Ähnlich:

var thing = CreateThing();
thing.CategoryID = 123;
Console.WriteLine("Category name: {0}", order.Category.Name);

wirft eine NullReferenceException . Verwandtes Objekt Category lädt nicht den Kategorie-Datensatz mit der ID 123.

Nachdem Sie jedoch Änderungen an die DB übermittelt haben, werden diese Werte synchronisiert. Aber bevor Sie die DB besuchen, funktionieren der FK-Wert und das zugehörige Objekt praktisch unabhängig!

(Interessanterweise scheint der Fehler, den FK-Wert mit dem verwandten Objekt zu synchronisieren, nur dann aufzutreten, wenn keine untergeordnete Beziehung definiert ist, d. h. die Kategorie hat keine "Things"-Eigenschaft. Aber das "Laden bei Bedarf", wenn Sie nur den FK-Wert festlegen, funktioniert NIEMALS).

GOTCHA!

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