我如何在 C# 中进行此计算

How can i do this calculation in c#

好的,现在我有一个 TasksGroup 对象,它有一个 Taches 列表。此 Taches 列表包含许多任务,这些任务具有计算所需的名为 TaskDBATaskDuration 的属性。

但是我被 TaskDBA 指数部分困住了,不知道如何进行。感谢您的帮助!

公式:

10 x Log [ SUM( TaskDuration x 10^(0.1 x TaskDBA) +...+ TaskDuration2 x 10^(0.1 x TaskDBA2)+....]

TaskDuration 是一个字符串,TaskDBA 是一个整数

持续时间最初是从格式为 HH:MM:SS 的输入框中获取的,所以我在这里做的是我有方法 GetDuration 将持续时间转换为 TimeSpan 对象.

private TimeSpan GetDuration(string duration)
{
    var value = duration.Split(':').Select(int.Parse).ToArray();
    var datetime = new TimeSpan(value[0], value[1], value[2]);
    return datetime;
}

我卡住的计算方式是

10^(0.1 * TaskDBA)

任务 = 任务列表

public double CalculateExposition(TasksGroup group)
{
    // i thought this could be usefull
    var GetDBA = group.Taches.Select(x => (double)(x.TaskDBA));

    //i first use x.TotalHours because i need my TimeSpan to be converted to decimal

    var sum = group.Taches.Select(x => GetDuration(x.TaskDuration)).Sum(x => x.TotalHours * 
    Math.Pow(10,GetDBA.));

    return sum;
}

我认为你应该能够像这样简化你的方法:

public double CalculateExposition(TasksGroup group)
{
    return 10 * Math.Log(group.Taches.Sum(x => TimeSpan.Parse(x.TaskDuration).TotalHours * Math.Pow(10, x.TaskDBA / 10.0)));
}

您不需要做任何事情Select,直接做您需要的总和即可。如您所见,对于每个 Tach,您需要做的就是:

TimeSpan.Parse(x.TaskDuration).TotalHours * Math.Pow(10, x.TaskDBA / 10.0)

** 更新 **

由于输入字符串中的小时数可以大于 23,而 TimeSpan.ParseParseExact 不支持,因此您需要这样做:

private TimeSpan GetDuration(string duration)
{
    var parts = duration.Split(':').Select(x => int.Parse(x)).ToList();
    return new TimeSpan(parts[0], parts[1], parts[2]);
}

public double CalculateExposition(TasksGroup group)
{
    return 10 * Math.Log(group.Taches.Sum(x =>
        GetDuration(x.TaskDuration).TotalHours * Math.Pow(10, x.TaskDBA / 10.0)
    ));
}