Multiply TimeSpan in .NET

Come posso moltiplicare un object TimeSpan in C #? Supponendo che la duration variabile sia un TimeSpan , vorrei, ad esempio

 duration*5 

Ma questo mi dà un errore “l’operatore * non può essere applicato ai tipi TimeSpan e int”. Ecco la mia soluzione attuale

 duration+duration+duration+duration+duration 

Ma questo non si estende ai multipli non interi, ad es. duration * 3.5

    Da questo articolo

     TimeSpan duration = TimeSpan.FromMinutes(1); duration = TimeSpan.FromTicks(duration.Ticks * 12); Console.WriteLine(duration); 

    Per coloro che desiderano copiare e incollare:

     namespace Utility { public static class TimeSpanExtension { ///  /// Multiplies a timespan by an integer value ///  public static TimeSpan Multiply(this TimeSpan multiplicand, int multiplier) { return TimeSpan.FromTicks(multiplicand.Ticks * multiplier); } ///  /// Multiplies a timespan by a double value ///  public static TimeSpan Multiply(this TimeSpan multiplicand, double multiplier) { return TimeSpan.FromTicks((long)(multiplicand.Ticks * multiplier)); } } } 

    Esempio di utilizzo:

     using Utility; private static void Example() { TimeSpan t = TimeSpan.FromSeconds(30).Multiply(5); } 

    t finirà per 150 secondi.

    La struttura TimeSpan non fornisce un sovraccarico per l’operatore * , quindi devi farlo tu stesso:

     var result = TimeSpan.FromTicks(duration.Ticks * 5); 

    È ansible utilizzare i dati interni di TimeSpan, ovvero tick.

     TimeSpan day = TimeSpan.FromDays(1); TimeSpan week = TimeSpan.FromTicks(day.Ticks * 7); 

    È necessario specificare quale membro si desidera moltiplicare per 5 -> TimeSpan.TotalMinutes * 5

    Il problema qui è che vuoi moltiplicare l’intervallo di tempo. La soluzione più semplice è usare le zecche. per esempio.

      var ticks = TimeSpan.FromMinutes(1).Ticks; var newTimeSpan = TimeSpan.FromTicks(ticks*5);