Свойство списка< & gt; не обновляется
У меня есть этот код ниже:
Foood[] food = new Foood[types]; food[0] = new Foood("protein", 2.0); food[1] = new Foood("vitamins", 3.0); food[2] = new Foood("Carbonhydrate", 4.0);
а потом это
List<Foood> foods = new List<Foood>(); foods.Add(food[0]); foods.Add(food[1]); foods.Add(food[2]);
а потом это
for (int i = 0; i < days; i++) { UpdateCalories(foods); }
public void UpdateCalories(List<Foood> foodItem) { for (int i = 0; i < foodItem.Count; i++) { foodItem[i].calories = foodItem[i].calories + 1.1; } }
я хочу иметь возможность иметь значения для разных дней перед печатью
Что я уже пробовал:
Я написал и вставил код
got this: Day0 protein,5.3 vitamins,6.3 Carbonhydrate,7.3 Day1 protein,5.3 vitamins,6.3 Carbonhydrate,7.3 Day2 protein,5.3 vitamins,6.3 Carbonhydrate,7.3 Day3 protein,5.3 vitamins,6.3 Carbonhydrate,7.3 ----------------------------------------
Но я хочу этого:
Day0 protein,2.0 vitamins,3.0 Carbonhydrate,4.0 Day1 protein,3.1 vitamins,4.1 Carbonhydrate,5.1 Day2 protein,4.2 vitamins,5.2 Carbonhydrate,6.2 Day3 protein,5.3 vitamins,6.3 Carbonhydrate,7.3 -----------------
Я все еще хочу иметь доступ к значениям предыдущих дней, а не только к последнему дню.
это мой выходной код
----------------------------
using (StreamWriter sw = new StreamWriter(@"U:\Food\food.txt")) { sw.WriteLine("Day" + "{0}", 0); for (int ii = 0; ii < types; ii++) { sw.WriteLine("{0},{1}", food[ii].Type, food[ii].Calories); } sw.WriteLine(""); for (int i = 0; i < days; i++) { { sw.WriteLine("Day" + "{0}", i + 1); for (int ii = 0; ii < types; ii++) { sw.WriteLine("{0},{1}", food[ii].Type, food[ii].Calories); } sw.WriteLine(""); } } }
CHill60
Ваш вопрос не совсем ясен. Используйте Улучшить вопрос ссылка для описания вашей проблемы
[no name]
Вам уже сказали, что делать. Немного логического мышления вам поможет. Если вы обновите все свои объекты одновременно,что еще вы ожидаете?
imeyal0
пожалуйста, помогите и помогите. Я также пытался обновить в разные дни, но результат один и тот же
j snooze
ну, я не вижу, что делает ваш UpdateCalories, но если у вас нет метода под названием updatecalories, я бы сказал, что это ваша проблема. Кроме того, ваш код должен быть написан, чтобы быть более ремонтопригодным. Где у вас есть
продукты.Добавить (еда[0]);
продукты.Добавить (еда[1]);
продукты.Добавить (еда[2]);
что происходит, когда есть 50 видов пищи? вы собираетесь написать 50 строк кода и перекомпилировать их для каждого добавленного типа пищи?
Так и должно быть
для (int i=0; i<food.длина; i++){
продукты.Добавить (еда[i]);
}
если вышесказанное-всего лишь пример, это прекрасно, но если вы планируете сделать из этого настоящее приложение, я настоятельно рекомендую цикл for .
imeyal0
updatecalories есть.
да..Это всего лишь образец.
пожалуйста, помогите и помогите. Я также пытался обновить в разные дни, но результат один и тот же
Patrice T
Какой результат вы получаете ?
Какой выход вы хотите ?
imeyal0
получить это:
День0
белок, 5,3
витамины,6,3
Углекислый газ, 7,3
День1
белок, 5,3
витамины,6,3
Углекислый газ, 7,3
День2
белок, 5,3
витамины,6,3
Углекислый газ, 7,3
День 3
белок, 5,3
витамины,6,3
Углекислый газ, 7,3
----------------------------------------
Но я хочу этого:
День0
белок, 2,0
витамины, 3,0
Углекислый газ, 4,0
День1
белок, 3,1
витамины, 4,1
Углекислый газ, 5.1
День2
белок, 4,2
витамины, 5,2
Карбонатный гидрат, 6,2
День 3
белок, 5,3
витамины,6,3
Углекислый газ, 7,3
-----------------
Я все еще хочу иметь доступ к значениям предыдущих дней, а не только к последнему дню.
Patrice T
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
Добавьте фрагмент кода, который дает фактический результат. что - то, что мы можем запустить.
imeyal0
Я добавил код
imeyal0
Я использовал его - и дал тот же неправильный результат, что и раньше.
imeyal0
когда я попробовал то, что вы предложили - это сработало. Но при этом у меня не будет доступа к повторному использованию значений предыдущих дней. Пожалуйста, помогите дальше.
Большое спасибо.
imeyal0
спасибо вам, ребята, за ваши усилия. Главное это то, что мне нужно иметь возможность сохранять ежедневные значения калорий, которые будут использоваться для других расчетов. Печать на выход придет только после того, как все будет сделано.
Patrice T
Для обсуждения решения используйте кнопку" есть вопрос или комментарий? " в нижней части решения.
Ему легче следовать.
imeyal0
Здравствуйте, пожалуйста, как мне отправить выходные данные в файл Excel/CSV вместо текстового файла? Пожалуйста, помогите.
Patrice T
Вам лучше задать новый вопрос, чтобы все знали.
j snooze
а ... теперь я понимаю, в чем дело. Если вы передаете этот список другому методу, то по умолчанию используется byval (или просто его копия), поэтому вы обновляете только переменную "handed off to" в методе Updatecalories. Вы можете сделать это 2 способами, но вам все равно придется придумать способ хранения списка для каждого отдельного дня, если только я не неправильно понимаю, что вы пытаетесь сделать, потому что это не совсем ясно.
Либо передайте список byref, чтобы ваш метод должен был быть определен как
(Решение 1)
public void UpdateCalories(byref List<foood> foodItem){
//// сохранить текущий код
}
Или
(Решение 2)
общественная список<foood&ГТ; UpdateCalories(список<foood&ГТ; foodItem)
{
for (int i = 0; i < foodItem.Граф; i++)
{
foodItem[я].калорий = foodItem[я].калорий + 1.1;
}
вернуть foodItem;
}
затем ваш цикл for, вызывающий метод, должен будет сделать это
for (int i = 0; i < days; i++)
{
foods = UpdateCalories(продукты питания);
}
j snooze
Я только что видел вывод, который вам нужен, чтобы сделать это, вы либо должны хранить каждый день в своем собственном списке, либо выводить данные в своем методе updatecalories на лету и не беспокоиться о хранении их в списке.
imeyal0
Я уже пробовал решение 2, но оно не сработало. Кроме того, я храню каждый день в списке списка.
Я попробую Решение 1 сейчас и вернусь как можно скорее.
imeyal0
я получил тот же результат
День0
белок, 5,3
витамины,6,3
Углекислый газ, 7,3
День1
белок, 5,3
витамины,6,3
Углекислый газ, 7,3
День2
белок, 5,3
витамины,6,3
Углекислый газ, 7,3
День 3
белок, 5,3
витамины,6,3
Углекислый газ, 7,3
но я хочу этого:
---------------------------
Но я хочу этого:
День0
белок, 2,0
витамины, 3,0
Углекислый газ, 4,0
День1
белок, 3,1
витамины, 4,1
Углекислый газ, 5.1
День2
белок, 4,2
витамины, 5,2
Карбонатный гидрат, 6,2
День 3
белок, 5,3
витамины,6,3
Углекислый газ, 7,3
imeyal0
используя (модулю записи StreamWriter ео = новая модулю записи StreamWriter(@"U:\Food\food.txt"))
{
//ув.Метода WriteLine("");
for (int i = 0; i < days; i++)
{
{
sw. WriteLine ("День" + " {0}", i + 1);
for (int ii = 0; ii < types; ii++)
{
ув.Метода WriteLine("{0},{1}", foodDays[я].продукты питания[ИИ].Типа, foodDays[я].продукты питания[ИИ].Калорий);
}
ув.Метода WriteLine("");
}
}
}
imeyal0
пожалуйста, как сделать свойство (калории) объекта не ссылочного типа. так что, как только он будет изменен, это не повлияет на все остальные дни