Yop*_*Yop 5 .net c# arrays class
我有一个名为playcards的类,它继承自卡片类.我将它实例化为一个名为chuckcards的对象.其中一个数据成员是CARD ID.我正在尝试为值分配一个int.它在类中声明为public.这是它的实例化方式.
playingcards[] chuckcards = new playingcards[10];
以下是我尝试分配值的方法.
for (int ctr = 1; ctr < 10; ctr++)
{
chuckcards[ctr].cardID = ctr;
temp++;
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
你调用的对象是空的.
我不知道我做错了什么?我可以创建一个为每个成员分配值的方法吗?如果是这样对某些事情会有痛苦,但我能做到吗?或者他们是一个简单的方法?
当您调用时new playingcards[10],它仅创建具有该类型的默认值的占位符,该占位符null用于引用类型.你将不得不实际上新的游戏卡然后使用它
for (int ctr = 1; ctr < 10; ctr++)
{
chuckcards[ctr] = new playcards{cardID=ctr};
temp++;
}
Run Code Online (Sandbox Code Playgroud)
我使用对象初始化器将代码简化为一行.
这是发生的事情:
var chuckcards = new playingcards[10];
Run Code Online (Sandbox Code Playgroud)
结果如下:
chuckcards[0] = null
...
chuckcards[9] = null
Run Code Online (Sandbox Code Playgroud)
所以,你做不到
chuckcards[0].cardID
Run Code Online (Sandbox Code Playgroud)
因为它确实如此
null.cardID
Run Code Online (Sandbox Code Playgroud)
因此,一旦初始化该值,它将从那时开始引用:
chuckcards[0] = new playingcards();
chuckcards[0].cardID = ctr;
Run Code Online (Sandbox Code Playgroud)
评估为
[ref to playingcards].cardID
Run Code Online (Sandbox Code Playgroud)
这是有效的
您已定义了一个包含10个插槽实例的数组,但每个插槽仍然为空
在进入循环之前,您需要在每个插槽中添加一个实例
chuckcards[0] = new playingcards();
Run Code Online (Sandbox Code Playgroud)
等等.....(1,2,... 9 =最大指数)
如果您已将实例分配给特定插槽,最终您可以在循环内部进行检查
for (int ctr = 0; ctr < 10; ctr++)
{
if(chuckcards[i] != null)
{
chuckcards[ctr].cardID = ctr;
temp++;
}
}
Run Code Online (Sandbox Code Playgroud)
请记住,数组索引从零开始,而不是一个