Wie multipliziere ich ein TimeSpan-Objekt in C #? Angenommen, die Variable duration
ist eine Zeitspanne , möchte ich zum Beispiel
duration*5
Aber das gibt mir einen Fehler "Operator * kann nicht auf die Typen TimeSpan und int angewendet werden". Hier ist meine aktuelle Problemumgehung
duration+duration+duration+duration+duration
Dies erstreckt sich jedoch nicht auf nicht ganzzahlige Vielfache, z. duration * 3.5
Antworten:
Aus diesem Artikel
quelle
TimeSpan.FromTicks((long)(duration.Ticks*multiplier))
Für diejenigen, die kopieren und einfügen möchten:
Anwendungsbeispiel:
t
wird als 150 Sekunden enden.quelle
Die
TimeSpan
Struktur stellt keine Überlastung für den*
Bediener bereit , daher müssen Sie dies selbst tun:quelle
TimeSpan.Multiply
ist in .NET Core angekommen und wird voraussichtlich in .NET Standard 2.1 eintreffen:https://docs.microsoft.com/en-us/dotnet/api/system.timespan.op_multiply?view=netstandard-2.1
quelle
Sie können die internen Daten von TimeSpan verwenden, nämlich Ticks.
quelle
Zecken verwenden:
http://www.personal.psu.edu/wbk2/blogs/personal_blog/dotnet-stuff-timespan-multiplication-and-division.html
quelle
Multiplizieren ist jetzt für TimeSpan verfügbar !!!
Aber nur für .NET Core und .NET Standard .
Seit .NET Core 2.0 (oder .NET Standard 2.1 ) können Sie den folgenden Code erfolgreich ausführen:
Einschränkungen
Es ist jedoch wichtig zu beachten ( wie im Dokument beschrieben ), dass dies nur für .NET Core 2.0 + und .NET Standard 2.1 + gilt.
Ab heute (26. November 2019) schlägt der obige Code auch in der neuesten .NET Framework- Version fehl : 4.8 .
Wenn Sie den obigen Code in einer Konsolenanwendung ausprobieren , z. B. .NET Core 1.1 oder niedriger oder .NET Framework 4.8 oder niedriger, wird die folgende Ausnahme ausgelöst:
Warum nicht in .NET Framework?
Um zu verstehen, warum wir den obigen Code in .NET Framework nicht verwenden können, ist es aufschlussreich zu sehen, was Immo sagt :
quelle
Sie müssen angeben, welches Mitglied Sie mit 5 multiplizieren möchten ->
TimeSpan.TotalMinutes * 5
quelle
T * 5
sollte auch die Stunden und Sekunden multiplizieren.TotalMinutes
ist jedoch die Gesamtdauer der Zeitspanne in Minuten. Wenn die Zeitspanne also eine Stunde und 10 Minuten und 30 Sekunden darstellt, würde TotalMinutes 70,5 zurückgeben.TotalMinutes
Eigenschaft ein Double, das die Gesamtanzahl der Minuten der gesamten Zeitspanne angibt, wobei alle anderen Felder berücksichtigt werden. Diese Lösung funktioniert genauso,Ticks
scheint aber ein besserer Ansatz zu sein. Beachten Sie jedoch, dass die Ticks später in Minuten umgewandelt werden müssen, wenn Sie dem Benutzer einige sinnvolle Informationen anzeigen möchten.Das Problem hierbei ist, dass Sie die Zeitspanne multiplizieren möchten. Die einfachste Problemumgehung ist die Verwendung von Zecken. z.B.
quelle