Ich bin ein bisschen spät dran, aber ich habe zwei Probleme, die mich beide in letzter Zeit geplagt haben:
DateTime-Auflösung
Die Eigenschaft Ticks misst die Zeit in 10-Millionstel-Sekunden (100-Nanosekunden-Blöcke), die Auflösung beträgt jedoch nicht 100 Nanosekunden, sondern etwa 15 ms.
Dieser Code:
long now = DateTime.Now.Ticks;
for (int i = 0; i < 10; i++)
{
System.Threading.Thread.Sleep(1);
Console.WriteLine(DateTime.Now.Ticks - now);
}
gibt Ihnen eine Ausgabe von (zum Beispiel):
0
0
0
0
0
0
0
156254
156254
156254
Ähnlich verhält es sich mit DateTime.Now.Millisecond: Sie erhalten Werte in gerundeten Abschnitten von 15,625 ms: 15, 31, 46, usw.
Dieses besondere Verhalten variiert von System zu System aber es gibt noch weitere auflösungsbedingte Probleme in dieser Datum/Uhrzeit-API.
Pfad.Kombinieren
Eine großartige Möglichkeit, Dateipfade zu kombinieren, aber sie verhält sich nicht immer so, wie man es erwarten würde.
Beginnt der zweite Parameter mit einem \
Zeichen, wird es Ihnen keinen vollständigen Pfad geben:
Dieser Code:
string prefix1 = "C:\\MyFolder\\MySubFolder";
string prefix2 = "C:\\MyFolder\\MySubFolder\\";
string suffix1 = "log\\";
string suffix2 = "\\log\\";
Console.WriteLine(Path.Combine(prefix1, suffix1));
Console.WriteLine(Path.Combine(prefix1, suffix2));
Console.WriteLine(Path.Combine(prefix2, suffix1));
Console.WriteLine(Path.Combine(prefix2, suffix2));
Sie erhalten diese Ausgabe:
C:\MyFolder\MySubFolder\log\
\log\
C:\MyFolder\MySubFolder\log\
\log\
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.
6 Stimmen
Veränderlicher Werttyp: System.Collections.Generics.List.Enumerator :( (Und ja, Sie können sehen, dass es sich seltsam verhält, wenn Sie sich genug Mühe geben).
0 Stimmen
Lol, ich wusste, dass es Ausnahmen geben würde. Enumerator scheint irgendwie... s
14 Stimmen
T
22 Stimmen
N
4 Stimmen
T
4 Stimmen
D
2 Stimmen
Sollte genannt werden
dt.NextDays(1);
haben die Programmierer keine Ahnung, dass er seinen eigenen Wert ändert. Genauso wie bei Datenstrukturkonstrukten (z.B.node->next
,node.next
) ändert den Wert von node nicht. Und jetzt ist es zu spät, sie könntendt.AddDays(1)
die Semantik, dass sie Tage in ihrem eigenen Wert hinzufügen.1 Stimmen
Ich stimme zu, dass es sich bei dem genannten Beispiel um eine Frage der Namensgebung handelt. Der Name der Methode impliziert, dass sie zum Datum addiert wird. Etwas wie
dt.PlusDays(1)
wäre klarer. Ein weiteres Problem bei dieser Methode ist, dass sie nur einedouble
Wert, so dass das Ergebnis nicht exakt ist.0 Stimmen
Ich würde diese Frage gewinnen, wenn eine dumme Person dieses Thema nicht geschlossen hätte. Ich kenne den bösesten Bug der Welt. Bitte sehen Sie codeproject.com/Feature/
1 Stimmen
@bluefeet, da die Benutzer >= 62 Antworten gegeben haben (einschließlich Jon Skeet), viele davon mit Hunderten von Bewertungen, dann wollen die Benutzer offenbar auch diese Art von Fragen. Entweder handelt es sich hier um eine angemessene Art von Fragen, oder es ist Zeit für eine Verfassungsänderung aller einschränkenden Regeln von SO.
0 Stimmen
5.add(2); 5 sollte immer noch 5 sein.