Я хотел бы написать метод расширения в списке, который выполняет арифметическую операцию над элементом списка и предоставленным двойным, а затем записывает результат обратно в список. Пример:Метод расширения для списка, который выполняет арифметическую операцию в элементе списка
public class Datum
{
public DateTime DateTime;
public double Value;
}
public static class DateExt
{
public static double Average(this IEnumerable<Datum> @this)
{
return @this.Average(datum => datum.Value);
}
public static double Sum(this IEnumerable<Datum> @this)
{
return @this.Sum(datum => datum.Value);
}
public static IEnumerable<Datum> InTimeRange(this IEnumerable<Datum> @this, DateTime start, DateTime end)
{
return from datum in @this
where (start <= datum.DateTime && datum.DateTime < end)
select datum;
}
}
Это позволяет мне сделать следующее:
return somelist.InTimeRange(startdate, enddate).Sum()
который будет возвращать сумму по всем пунктам между двумя датами. Теперь я хотел бы создать метод расширения, который принимает двойной и соответственно обновляет список. Например:
return somelist.InTimeRange(startdate, enddate).Addition(double val)
должен добавить val к каждому элементу в списке, который находится между датой начала и датой окончания. Я пробовал:
public static double Addition(this IEnumerable<Datum> @this, double val)
{
return @this.(datum => datum.Value)+= val;
}
Но это не работает.
Таким образом, если элемент списка равен 10 и val = 5, то обновленный элемент списка в том же положении должен быть равен 15 - только для избежания сомнений.
Любые идеи приветствуются.
Спасибо.
Почему он не работает? Какое сообщение об ошибке или как оно себя ведет, так что вы считаете, что оно неверно? Кроме этого - ваш код выглядит некорректным в первую очередь - '@this. (Datum ...)', что он должен подразумевать? Вы не вызываете никакого метода – Pako
Вы говорите, что это «не работает». Не может ли он выполнить то, что вы ожидаете, или это порождает исключение или просто терпит неудачу? – Adrian
Идентификатор ожидается. – nik