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