提问人:user3072143 提问时间:7/4/2018 最后编辑:user3072143 更新时间:7/21/2018 访问量:42
对象引用并为其分配新类 [duplicate]
Object reference and assigning new class with it [duplicate]
问:
尝试传递对象引用并在新脚本/类中设置它。 播放器 .cs
如何正确引用和分配
答:
0赞
Semimono
7/4/2018
#1
我相信这是 NullPointer 异常能够引用多个问题的令人讨厌的实例之一。它只给你行号,但不给你该行中的哪个引用是空的。 不是 null,是。您需要在方法的前面或在 PanelUpdate 构造函数中初始化该值。NewPlayer
AchievementList
ShowUI
P.S. 我讨厌空引用异常的非特异性;非常令人沮丧。
评论
0赞
user3072143
7/4/2018
所以我创建了构造函数并将 PlayerDetails 传递给它并将其分配给一个新的构造函数,仍然不确定,但它仍然将“this”显示为 null puu.sh/AQtUk/b58c3360dc.png
0赞
Semimono
7/4/2018
是的,在构造函数完成之前,不能传递对象的引用。您可以使用来分配值(又名 this.Player =...),但你不能为(又名 myVar=this)赋值。我认为这种表示就是调试器显示它的方式。this
this
0赞
Semimono
7/4/2018
但我想你可能错过了我想指出的内容。您需要在构造函数中初始化,而不是 或 . 是 null 的值。AchievementList
NewPlayer
Player
AchievementList
0赞
user3072143
7/4/2018
无法初始化成就列表。这是一个 Unity 文本字段,无论如何都试图设置相同的错误
0赞
Bizhan
7/4/2018
@user3072143我认为他的意思是NewPlayer.Achievement
0赞
C. Carter
7/4/2018
#2
您的 PlayerDetails 对象中有一个 null 属性。在调试模式下检查 NewPlayer 对象的属性,您将看到这一点。
即使你在其上使用新的构造函数,也不意味着该属性将被赋予一个值,除非在构造函数中专门为其指定一个值。
您还需要显示 PlayerDetails 类的代码,以便给我们一个更好的主意。
也:
PlayerDetails Player = new PlayerDetails(); // Assigning a new value here means nothing
Player = NewPlayer;
您正在第 #1 行创建一个新的 PlayerDetails 对象,但随后在第 #2 行为其分配一个不同的值。
PlayerDetails Player = NewPlayer;
没关系。
评论
Player
Player = NewPlayer;
Player.Achievement
Player.Achievement
PanelUpdate
AchievementList
public PanelUpdate(PlayerDetails NewPlayer) { PlayerDetails Player = new PlayerDetails(); Player = NewPlayer; }