C#: Как использовать Счетное. Совокупный метод

Ни. По моему опыту, есть два основных типа строковых литералов: те, которые являются инвариантными, и те, которые должны быть переведены, когда ваш код локализован.

Важно различать эти два во время написания кода, чтобы вам не приходилось возвращаться и выяснять, что будет позже.

Поэтому я использую _UT() для непереводимых строк, а ZZT() (или что-то еще, что легко найти) для строк, которые нужно будет перевести. Экземпляры _T() или _TEXT() в коде свидетельствуют о строковых литералах, которые еще не были правильно классифицированы.

_UT и ZZT оба определены #TEXT

19
задан Shimmy 15 December 2015 в 12:34
поделиться

5 ответов

Комбинация ответов Криса и Дэниелса решила эту проблему для меня. Мне нужно было инициализировать TimeSpan, и я сделал все в неправильном порядке. Решение:

foreach(var g in groups)
    Console.WriteLine("{0}, {1}:{2}", 
        g.Key.Country, 
        g.Key.Age, 
        g.Aggregate(TimeSpan.Zero, (sum, x) => sum + x.TimeSpentOnSO));

Спасибо!

А также ... Ооо!

2
ответ дан 30 November 2019 в 03:16
поделиться
List<TimeSpan> list = new List<TimeSpan>
    {
        new TimeSpan(1),
        new TimeSpan(2),
        new TimeSpan(3)
    };

TimeSpan total = list.Aggregate(TimeSpan.Zero, (sum, value) => sum.Add(value));

Debug.Assert(total.Ticks == 6);
24
ответ дан 30 November 2019 в 03:16
поделиться
g.Aggregate(TimeSpan.Zero, (i, p) => i + p.TimeSpentOnSO)

По сути, первый аргумент Aggregate - это инициализатор, который используется в качестве первого значения «i» в функции, переданной во втором аргументе. Он будет перебирать список, и каждый раз «i» будет содержать итоговое значение на данный момент.

Например:

List<int> nums = new List<int>{1,2,3,4,5};

nums.Aggregate(0, (x,y) => x + y); // sums up the numbers, starting with 0 => 15
nums.Aggregate(0, (x,y) => x * y); // multiplies the numbers, starting with 0 => 0, because anything multiplied by 0 is 0
nums.Aggregate(1, (x,y) => x * y); // multiplies the numbers, starting with 1 => 120
14
ответ дан 30 November 2019 в 03:16
поделиться

Вы можете написать TimeSpan Sum метод ...

public static TimeSpan Sum(this IEnumerable<TimeSpan> times)
{
    return TimeSpan.FromTicks(times.Sum(t => t.Ticks));
}
public static TimeSpan Sum<TSource>(this IEnumerable<TSource> source,
    Func<TSource, TimeSpan> selector)
{
    return TimeSpan.FromTicks(source.Sum(t => selector(t).Ticks));
}

В качестве альтернативы, MiscUtil имеет общие методы Sum , поэтому Sum должен работать на a TimeSpan в порядке (поскольку существует оператор TimeSpan + TimeSpan => TimeSpan ).

Просто , пожалуйста, не сообщайте мне номер. .. это бы меня напугало ...

1
ответ дан 30 November 2019 в 03:16
поделиться

Вы можете суммировать одно из свойств Total TimeSpan. Например, вы можете получить общее количество часов, потраченное на SO, следующим образом:

g.Sum(x => x.SOReputation.TotalHours)

Я считаю, что это даст вам результат, который вы ищете, но с оговоркой, что вам придется указать единицы измерения в соответствии с к тому, что вам нужно (часы, минуты, секунды, дни и т. д.)

0
ответ дан 30 November 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: