Объекту не присваивается значение (null)
В мейне я создаю пустой объект Fighter firstFighter = null; и отправляю этот объект в метод ChooseFighter(Fighter[] fighters, Fighter fighter), и в этом методе объекту firstFighter присваиваю значение из массива Fighter[] fighters;, но при выходе из метода объект как был null так и остался, в чем моя ошибка?
class Program
{
private static void Main(string[] args)
{
Fighter[] fighters =
{
new Rogue(600, 10, 50),
new Knight(1200, 20, 25),
};
Fighter firstFighter = null;
Fighter secondFighter = null;
Console.WriteLine("Выберите первого бойца");
ChooseFighter(fighters, firstFighter);
Console.WriteLine("Выберите второго бойца");
ChooseFighter(fighters, secondFighter);
}
private static void ChooseFighter(Fighter[] fighters, Fighter fighter)
{
string userInput;
int index;
bool isCorrectParse;
while (fighter == null)
{
userInput = Console.ReadLine();
isCorrectParse = int.TryParse(userInput, out index);
if (isCorrectParse && index > 0 && index - 1 < fighters.Length)
{
index -= 1;
fighter = fighters[index];
}
else
{
Console.WriteLine("Вы ввели неправильный индекс, попробуйте снова!");
}
}
}
}
class Fighter
{
public int Health { get; protected set; }
public int Damage { get; protected set; }
public int Armor { get; protected set; }
public Fighter(int health, int damage, int armor)
{
Health = health;
Damage = damage;
Armor = armor;
}
}
class Rogue : Fighter
{
public Rogue(int health, int armor, int damage) : base(health, damage, armor) { }
}
class Knight : Fighter
{
public Knight(int health, int armor, int damage) : base(health, damage, armor) { }
}
}
Ответы (1 шт):
Автор решения: Andrei Pavlyuk
→ Ссылка
Так получается поскольку вы передаете null, а не предоставляете ссылку, которую ожидает получить функция. Чтобы решить этот вопрос создаете экземпляр и передайте по ссылке в качестве аргумента метода, либо используйте ключевое слово ref.
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/ref#passing-an-argument-by-reference