* РЕДАКТИРОВАТЬ * :: Я обнаружил проблему при сборе фактического кода.
Я работаю с C # в Visual Studio 2015
У меня проблемы с передачей объекта класса, который имеет поле типа объект класса. Я создал два простых класса, класс A и класс B, и у класса A есть поле класса типа B. После создания экземпляра класса A, а затем установки его поля типа B на новый экземпляр класса B Кажется, работает нормально. Но затем, когда я передаю экземпляр класса A в метод, поле типа класса B отображается как Null. Я могу записать значения всех полей класса B, и они показывают правильные значения во время отладки перед отправкой в метод, но при передаче моего объекта класса A в метод он генерирует исключение NullReferenceException и сообщает мне «Ссылка на объект не установлена на экземпляр объекта. " Все остальные поля в моем объекте класса А работают нормально; поле типа B является единственным, которое делает это.
Когда я копировал / вставлял метод в новое решение и подрезал / добавил, чтобы избавиться от всех ошибок, он работал нормально. Поэтому я не уверен, почему моя программа продолжает так не работать.
Есть предложения?
class Program
{
// Start of the program
static void Main(string[] args)
{
// Instantiate the player
Player player = new Player() { playerWeapon = new Weapon() };
showPlayerStats(player);
}
// Method shows the player's stats
static void showPlayerStats(Player player)
{
Console.WriteLine(" ******** Player Statistics ********");
Console.WriteLine();
Console.WriteLine(" Player Name:".PadRight(16) + player.playerName);
Console.WriteLine(" Player Gender:".PadRight(16) + player.playerGender);
Console.WriteLine(" Player Race:".PadRight(16) + player.playerRace);
Console.WriteLine(" Player Class:".PadRight(16) + player.playerClass);
Console.WriteLine(" Player Health:".PadRight(16) + player.playerHealth + "/" + player.playerMaxHealth);
Console.WriteLine(" Player EXP:".PadRight(16) + player.playerEXP);
Console.WriteLine(" Player Gold:".PadRight(16) + player.playerMoney);
Console.WriteLine(" Player Weapon:".PadRight(16) + player.playerWeapon.name);
Console.ReadLine();
}
// Create player with random attributes
static Player RandomPlayer()
{
Player player = new Player(); //<<== This is where I goofed
return player;
}
}
class Player
{
public string playerName = "Name";
public string playerGender = "Gender";
public string playerRace = "Race";
public string playerClass = "Class";
public int playerHealth = 100;
public int playerEXP = 0;
public int playerMaxHealth = 100;
public int playerMoney = 50;
public double playerOneHanded = 1;
public double playerTwoHanded = 1;
public double playerRanged = 1;
public double playerMagic = 1;
public Weapon playerWeapon;
}
class Weapon
{
public string name = "Knife";
public int damage = 6;
public string type = "One";
}