byte[] IntToByteArray( int data ) {
byte[] result = new byte[4];
result[0] = (byte) ((data & 0xFF000000) >> 24);
result[1] = (byte) ((data & 0x00FF0000) >> 16);
result[2] = (byte) ((data & 0x0000FF00) >> 8);
result[3] = (byte) ((data & 0x000000FF) >> 0);
return result;
}
Только для проверки я понимаю Вас - Вы в основном хотите выполнить итерации через все результаты, только вызвать какие-либо побочные эффекты произойти?
Побочные эффекты обычно являются плохой идеей точно, потому что вещи более трудно понять с этим видом логики. Однако самый легкий способ сделать это и вызвать полную оценку должно, вероятно, просто выполнить итерации через него:
foreach (var result in aggregationResult)
{
// Deliberately empty; simply forcing evaluation of the sequence.
}
, Кроме того, Вы могли использовать LastOrDefault () для предотвращения всего копирования, привлеченного в ToArray (). количество () будет хорошо, пока результат не реализует IList<T>
(который включает ярлык).
Лучше избежать функций побочного эффекта как modifyCollection выше.
А лучший подход должен сделать функцию, которая возвращает измененный набор (или запрос), позволяя начальному неповрежденному.
var modifiedCollection = ModifyCollection(collection, collectionNeedsModification);
var aggregationResult = from a in
(from b in modifiedCollection
where b.SatisfysCondition)
.Aggregate(aggregationFunction)
select a.NeededValue;
, Где ModifyCollection является методом, который возвращает измененный набор (или запрос) в параметре в зависимости от collectionNeedsModification булева параметра.
Я не думаю, что существует проблема с Вашим подходом, если Вы будете всегда использовать результат (так как Ваш набор результатов не является большим, это не использует много памяти. Между прочим, если Вы сделаете это и никогда не будете использовать результат, то он наложит потерю производительности). Так, да, это - корректный способ сделать это.
(Примечание: ввод без компилятора, поэтому код не протестирован)
Если у вас уже есть Reactive Extensions для .NET в качестве зависимости, вы можете использовать Run ():
aggregationResult.Run();
Но, возможно, не стоит добавлять для этого зависимость.
Вы также можете реализовать метод Run самостоятельно как метод расширения:
public static MyLinqExtensions
{
public static void Run<T>(this IEnumerable<T> e)
{
foreach (var _ in e);
}
}