Я работаю над разработкой игральных карт на C# в рамках своего обучения этому новому языку. Я получил несколько ошибок, которые я смог найти в Google Fu и решить самостоятельно, но эта текущая ошибка:
Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
at Deck..ctor () [0x00087] in :0
at Program.Main (System.String[] args) [0x00000] in :0
[ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
at Deck..ctor () [0x00087] in :0
at Program.Main (System.String[] args) [0x00000] in :0
заблокировал меня. Я пробовал несколько разных способов рефакторинга public class Card
и функцию конструктора Card
, но я просто получаю разные ошибки и больше ошибок и не приближаюсь к их разрешению, поскольку сообщение об ошибке выше говорит мне, что я не правильно инициализировал объект Card card = new Card(rank, suit);
using System.Collections.Generic;
public class Deck {
// public List<Card> Cards = new List<Card>();
public List<Card> cards;
public Deck() {
string[] ranks = { "Ace", "Two", "Three", "Four", "Five" };
string[] suits = { "Diamonds", "Hearts", "Clubs", "Spades" };
foreach (string suit in suits) {
foreach (string rank in ranks) {
Card card = new Card(rank, suit);
cards.add(card);
}
}
}
}
public class Card {
// properties
public string suit { get; set; }
public string rank { get; set; }
public Card(string rank, string suit){
//initializations
rank = rank;
suit = suit;
}
}
Я просмотрел похожие сообщения, но они не относятся к моему делу, и я также следовал этому руководству:
У вас есть правильный код, закомментированный.
Кроме того, он должен быть this.suit = suit;
в конструкторе Card
и таким же для ранга.
Изменить public List<Card> cards;
на public List<Card> cards = new List<Card>();
Спасибо, это помогает, я все еще получаю error CS0103: The name cards does not exist in the current context
@Daniel, эй, в списке есть метод «Добавить». вы используете "добавить"
@SunilDhappadhule, спасибо, я как раз работал над этим, часть проблемы выглядит так, что мне нужно было написать это так Cards.Add(card);
, ссылаясь public List<Card> Cards = new List<Card>();
Ваш класс Card
, вероятно, должен включать свойство Value. «Туз» и «Дама» трудно оценить для таких вещей, как стрит в покере или счет руки в блэкджеке. Кроме того, во многих играх номиналы карт могут отличаться от ранга. Самый распространенный пример — туз в блэкджеке.
cards
равно нулю. Вы должны инициализировать его, как это было сделано в закомментированной строке над ним.
Используйте отладчик, чтобы выяснить, что такое
null
(вероятно,cards
), а затем сделайте его ненулевым.