主要是,我创建了一个空对象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) { }
}
}
这是因为您正在传递
null而不是提供函数期望接收的引用。要解决此问题,请创建一个实例并通过引用作为方法参数传递,或使用ref. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/ref#passing-an-argument-by-reference