Передача параметра через делегат - C#
Формулировка задачи:
Есть код создания солнечной системы, основную работу делает Библиотека <стринг, метод> в ней проверяется, содержит ли очередной стринг коллекции стрингов ssData ключевое слово, и если содержит, то запускается соответствующий метод, создать звезду, планету или спутник планеты. И было бы хорошо не использовать глобальную переменную для счётчика, а передавать счётчик i через эту библиотеку в метод. Как это можно сделать?
Листинг программы
- public void FillDictionary()
- {
- keywordhandlers.Add(DAL.KeyWords.STAR, () => CreateStar());
- keywordhandlers.Add(DAL.KeyWords.PLANET, () => CreatePlanet());
- keywordhandlers.Add(DAL.KeyWords.MOON, () => CreateMoon());
- }
- public void SearchKeyWords()
- {
- for (i = 0; i < ssData.Count; i++)
- {
- line = ssData[i];
- foreach (KeyValuePair<string, Action> para in keywordhandlers)
- {
- if (line.Contains(para.Key))
- {
- para.Value();
- }
- }
- }
- }
- public void CreateStar()
- {
- name = SetName();
- diameter = SetDiameter();
- mass = SetMass();
- temperature = SetTemperature();
- Stars.Add(new Star(name, mass, diameter, temperature));
- }
Решение задачи: «Передача параметра через делегат»
textual
Листинг программы
- public void FillDictionary()
- {
- keywordhandlers.Add(DAL.KeyWords.STAR, (x) => CreateStar(x));
- keywordhandlers.Add(DAL.KeyWords.PLANET, (x) => CreatePlanet(x));
- keywordhandlers.Add(DAL.KeyWords.MOON, (x) => CreateMoon(x));
- }
- public void SearchKeyWords()
- {
- for (i = 0; i < ssData.Count; i++)
- {
- line = ssData[i];
- foreach (KeyValuePair<string, Action<int>> para in keywordhandlers)
- {
- if (line.Contains(para.Key))
- {
- para.Value(i);
- }
- }
- }
- }
- public void CreateStar(int x)
- {
- name = SetName();
- diameter = SetDiameter();
- mass = SetMass();
- temperature = SetTemperature();
- Stars.Add(new Star(name, mass, diameter, temperature));
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д