Передача параметра через делегат - 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));
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы