Ни. По моему опыту, есть два основных типа строковых литералов: те, которые являются инвариантными, и те, которые должны быть переведены, когда ваш код локализован.
Важно различать эти два во время написания кода, чтобы вам не приходилось возвращаться и выяснять, что будет позже.
Поэтому я использую _UT()
для непереводимых строк, а ZZT()
(или что-то еще, что легко найти) для строк, которые нужно будет перевести. Экземпляры _T()
или _TEXT()
в коде свидетельствуют о строковых литералах, которые еще не были правильно классифицированы.
_UT
и ZZT
оба определены #TEXT
Комбинация ответов Криса и Дэниелса решила эту проблему для меня. Мне нужно было инициализировать 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));
Спасибо!
А также ... Ооо!
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);
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
Вы можете написать 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
).
Просто , пожалуйста, не сообщайте мне номер. .. это бы меня напугало ...
Вы можете суммировать одно из свойств Total TimeSpan. Например, вы можете получить общее количество часов, потраченное на SO, следующим образом:
g.Sum(x => x.SOReputation.TotalHours)
Я считаю, что это даст вам результат, который вы ищете, но с оговоркой, что вам придется указать единицы измерения в соответствии с к тому, что вам нужно (часы, минуты, секунды, дни и т. д.)