¿Cuál es la mejor manera de dividir dos objetos TimeSpan?

Quiero obtener la proporción de un TimeSpan frente a otro TimeSpan (Básicamente, el progreso de un video en reproducción desde su tiempo total). Mis métodos actuales son obtener los milisegundos de los dos objetos de TimeSpan y dividir uno contra el otro. Algo como:

int durationInMilliseconds = totalTimeSpan.Milliseconds; int progressInMilliseconds = progressTimeSpan.Milliseconds; Double progressRatio = progressInMilliseconds / durationInMilliseconds; 

¿Hay una ruta más directa? Es un problema simple y solo tengo curiosidad si existe una forma super elegante de resolverlo.

Saludos a todos James

Debe usar Ticks o TotalMilliseconds , dependiendo de la precisión requerida. Milisegundos es el número de milisegundos después del segundo actual.

En cuanto a una mejor solución, no se vuelve más simple que una división, por lo que su solución actual está bien (menos el error).

 double progressRatio = progressTimeSpan.Ticks / (double)totalTimeSpan.Ticks; 

Debe convertir uno a doble, de lo contrario C # hará una división entera. Las garrapatas son mejores que los TotalMillisegundos porque así es como se almacena y evita cualquier conversión.

TimeSpan ganó varios operadores nuevos con el lanzamiento de .NET Core 2.0 :

 public TimeSpan Divide(double divisor); public double Divide(TimeSpan ts); public TimeSpan Multiply(double factor); public static TimeSpan operator /(TimeSpan timeSpan, double divisor); public static double operator /(TimeSpan t1, TimeSpan t2); public static TimeSpan operator *(double factor, TimeSpan timeSpan); public static TimeSpan operator *(TimeSpan timeSpan, double factor); 

Es de destacar que un TimeSpan ahora se puede dividir por otro TimeSpan :

 var a = new TimeSpan(10, 0, 0); var b = new TimeSpan(0, 30, 0); var c = new TimeSpan(0, 4, 30); Console.WriteLine(a / b); // Displays: "20" Console.WriteLine(b / c); // Displays: "6.66666666666667" 

Hacer uso del método de extensión puede hacer que los códigos sean más legibles.

 public static double DividedBy(this TimeSpan x, TimeSpan y) { return Convert.ToDouble(x.Ticks) / y.Ticks; }