Объект, который не является нулевым, отображается как нулевой внутри моего метода - PullRequest
0 голосов
/ 23 июня 2018

* РЕДАКТИРОВАТЬ * :: Я обнаружил проблему при сборе фактического кода.

Я работаю с 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";
}

1 Ответ

0 голосов
/ 23 июня 2018

Я обнаружил проблему, когда вернулся к коду, чтобы собрать реальные фрагменты. Я использовал процесс создания случайных персонажей во время тестирования игры, и я пренебрег тем, что поместил оружие в поле Player.playerWeapon после метода, возвращающего игрока, таким образом, используя новый экземпляр объекта Player с полем Null. Спасибо за помощь.

...