Ответ 1
TimeSpan duration = TimeSpan.FromMinutes(1);
duration = TimeSpan.FromTicks(duration.Ticks * 12);
Console.WriteLine(duration);
Как я могу умножить объект TimeSpan на С#? Предполагая, что переменная duration
является TimeSpan, я хотел бы, например,
duration*5
Но это дает мне ошибку "оператор * не может применяться к типам TimeSpan и int". Здесь мое текущее обходное решение
duration+duration+duration+duration+duration
Но это не распространяется на нецелые кратные, например. duration * 3.5
TimeSpan duration = TimeSpan.FromMinutes(1);
duration = TimeSpan.FromTicks(duration.Ticks * 12);
Console.WriteLine(duration);
Для желающих скопировать и вставить:
namespace Utility
{
public static class TimeSpanExtension
{
/// <summary>
/// Multiplies a timespan by an integer value
/// </summary>
public static TimeSpan Multiply(this TimeSpan multiplicand, int multiplier)
{
return TimeSpan.FromTicks(multiplicand.Ticks * multiplier);
}
/// <summary>
/// Multiplies a timespan by a double value
/// </summary>
public static TimeSpan Multiply(this TimeSpan multiplicand, double multiplier)
{
return TimeSpan.FromTicks((long)(multiplicand.Ticks * multiplier));
}
}
}
Пример использования:
using Utility;
private static void Example()
{
TimeSpan t = TimeSpan.FromSeconds(30).Multiply(5);
}
t
закончится через 150 секунд.
Структура TimeSpan
не обеспечивает перегрузку для оператора *
, поэтому вы должны сделать это самостоятельно:
var result = TimeSpan.FromTicks(duration.Ticks * 5);
Вы можете использовать внутренние данные TimeSpan, а именно тики.
TimeSpan day = TimeSpan.FromDays(1);
TimeSpan week = TimeSpan.FromTicks(day.Ticks * 7);
Используйте тики:
Вам нужно указать, какой член вы хотите умножить на 5 → TimeSpan.TotalMinutes * 5
Проблема заключается в том, что вы хотите умножить время. Простейшим обходным путем является использование тиков. например.
var ticks = TimeSpan.FromMinutes(1).Ticks;
var newTimeSpan = TimeSpan.FromTicks(ticks*5);
TimeSpan.Multiply
прибыл в .NET Core и выглядит так, как будто он поступит в .NET Standard 2.1:
https://docs.microsoft.com/en-us/dotnet/api/system.timespan.op_multiply?view=netstandard-2.1
var result = 3.0 * TimeSpan.FromSeconds(3);