我知道这听起来很简单,但我在初始化对象方面遇到了问题。每当我运行我的代码。我一直收到错误。我需要在第27行初始化遭遇。
""未处理的类型' System.NullReferenceException'发生在WPFBattle.exe"。 "
所以我问了一个人他们告诉我了
"您忘记在MainWindow的构造函数中初始化遭遇。由于您没有对其进行初始化但仍将其传入,因此遇到的传递为null,这意味着您无法调用自动启动。公共icombat遭遇是声明,它不是初始化它。您可以像使用new关键字以及战斗构造函数那样对任何用户定义的对象进行初始化。"
所以我尝试过这样做,但我一直都会遇到错误。我不确定为什么它不起作用。我附上了我的代码图片,非常感谢任何帮助
1 namespace WPFBattle
2 {
3
4
5 public partial class MainWindow : Window
6 {
7 private TextBoxStreamWriter consoleWriter;
8 private TextBox outputField;
9 private IList<ICharacter> playerParty = new List<ICharacter>();
10 public ICombat encounter;
11 private CombatThread combatThread;
12
13 public MainWindow()
14 {
15 InitializeComponent();
16
17 // Redirect console
18 consoleWriter = new TextBoxStreamWriter(outputField);
19 Console.SetOut(consoleWriter);
20
21 //creates the two parties
22 List<ICharacter> party = new List<ICharacter>();
23 List<ICharacter> enemy = new List<ICharacter>();
24
25
26
27 //PLACE I NEED TO INITIALIZE MY OBJECT AT
28
29
30 combatThread = new CombatThread(encounter);
31 combatThread.Start();
32 }
33
34 private void textBox_TextChanged(object sender, TextChangedEventArgs e)
35 {
36
37 }
38
39
40 }
41 }
答案 0 :(得分:1)
第10行:您有以下代码:
public ICombat encounter;
但这种变量遭遇永远不会成为一种价值。所以它是空的。在第30行:您将此null值传递给combatThread。
combatThread = new CombatThread(encounter);
如果combatThread访问遇到类似的地方:
encounter.DoSth();
它会抛出一个
的NullReferenceException
因为遇到ICombat类型并且这是一个接口,所以不能在其上使用new运算符。您将需要一个实现此接口的类。
public class Combat : ICombat
{
//Implement what the Interface need
}
并为您的遭遇参考创建一个新对象。
encounter = new Combat(); //IMPORTANT
combatThread = new CombatThread(encounter);
combatThread.Start();
答案 1 :(得分:0)
要初始化遭遇,您需要致电
{{1}}
虽然你已经尝试过,但我猜这个问题还存在于其他地方。 你如何在CombatThread中使用遭遇?我猜你在CombatThread中保留了对它的引用,但忘记了或者对CombatThread.mEncounter进行了错误的分配。
在CombatThread中如何初始化遇到的引用?