Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 新实例化数组的长度解析为0还是null?_C#_Arrays - Fatal编程技术网

C# 新实例化数组的长度解析为0还是null?

C# 新实例化数组的长度解析为0还是null?,c#,arrays,C#,Arrays,家庭作业:我在下面的代码中获取和索引超出界限。这是一个刽子手游戏,我正在跟踪我在char数组中猜到的字母 以下是我的假设: 在调用方法中,我有一个未填充的数组(char[]displayGuesses=new char[26];)作为char[]usedleters参数传递给下面的方法 在字母猜测的第一次迭代中,数组将为空 它的长度将为0 我使用lettergusted参数填充usedLetters[0] 下次我猜,数组的长度将是1,所以usedLetters[1]会被填充…等等 public

家庭作业:我在下面的代码中获取和索引超出界限。这是一个刽子手游戏,我正在跟踪我在
char
数组中猜到的字母

以下是我的假设:

  • 在调用方法中,我有一个未填充的数组(
    char[]displayGuesses=new char[26];
    )作为
    char[]usedleters
    参数传递给下面的方法
  • 在字母猜测的第一次迭代中,数组将为空
  • 它的长度将为0
  • 我使用
    lettergusted
    参数填充
    usedLetters[0]
  • 下次我猜,数组的长度将是1,所以
    usedLetters[1]
    会被填充…等等

    public char[] trackUsedLetters(char letterGuessed, char[] usedLetters)
    {
        int letterIndex = usedLetters.Length;
        usedLetters[letterIndex] = letterGuessed;  
        return usedLetters;
    }
    
  • 我认为可能会发生一些事情

  • 当我在第一次运行时尝试获取
    usedLetters
    的长度时,空数组会执行此操作 不返回零,但返回null。繁荣禁止入内
  • 传递用26定义的空白数组时存在一些问题 成员。。。?但我甚至不确定这个问题会是什么,所以我不知道谷歌会做出什么样的结果
  • 我可能有一个范围问题;我发现了一个类似的问题 Java的问题,尽管使用了
    for
    循环。我不太明白 Java用户的目的是什么,但有些问题听起来像是 熟悉

  • 我需要另一双眼睛来观察这个问题,并为我指出解决这个问题的正确方向

    看起来您想要的是能够增长的
    列表
    (使用
    添加
    )方法

    数组的大小是固定的,下面的代码(示例中的代码)将始终抛出超出范围的异常,因为您访问的元素超过了数组中的最后一个元素

    usedLetters[usedLetters.Length] = 'c';
    
    有关数组长度的详细信息:

    // newArray - array of 0 chars. newArray.Length is 0
    var newArray = new char[0]; 
    
    // nullArray not created, nullArray.Length will throw NullReferenceExcetption
    char[] nullArray = null; 
    
    // defaultArray = array of 26 characters, each value 0.
    // defaultArray.Length is 26;
    char[] defaultArray = new char[26];
    

    看起来您想要的是可以增长的
    列表
    (使用
    添加
    )方法

    数组的大小是固定的,下面的代码(示例中的代码)将始终抛出超出范围的异常,因为您访问的元素超过了数组中的最后一个元素

    usedLetters[usedLetters.Length] = 'c';
    
    有关数组长度的详细信息:

    // newArray - array of 0 chars. newArray.Length is 0
    var newArray = new char[0]; 
    
    // nullArray not created, nullArray.Length will throw NullReferenceExcetption
    char[] nullArray = null; 
    
    // defaultArray = array of 26 characters, each value 0.
    // defaultArray.Length is 26;
    char[] defaultArray = new char[26];
    
    根据c#规范:(强调矿山)

    1.8阵列

    数组类型是引用类型,数组变量的声明只是为数组实例的引用留出空间实际阵列实例在运行时使用新操作符动态创建。新操作指定新阵列实例的长度,然后在实例的生存期内固定该长度。数组元素的索引范围从0到长度-1新运算符自动将数组元素初始化为其默认值,例如,对于所有数值类型,默认值为零,对于所有引用类型,默认值为null

    根据c#规范(emphasis mine),它将char数据类型默认为“\0”

    1.8阵列

    数组类型是引用类型,数组变量的声明只是为数组实例的引用留出空间实际阵列实例在运行时使用新操作符动态创建。新操作指定新阵列实例的长度,然后在实例的生存期内固定该长度。数组元素的索引范围从0到长度-1新运算符自动将数组元素初始化为其默认值,例如,对于所有数值类型,默认值为零,对于所有引用类型,默认值为null


    这使char数据类型默认为“\0”

    定义新数组时,如果不手动初始化其中的项,则该数组将自动用数组包含的任何类型的默认值初始化。在本例中,您正在创建一个字符数组。字符的默认值为“\0”或空字符


    这意味着数组永远不是真正的“空”。如果您定义一个具有26个插槽的数组,它将始终具有该长度,除非您创建一个新数组。

    当您定义一个新数组,但不手动初始化其中的项时,它将自动用数组包含的任何类型的默认值初始化。在本例中,您正在创建一个字符数组。字符的默认值为“\0”或空字符


    这意味着数组永远不会是真正的“空”。如果您定义一个具有26个插槽的数组,它将始终具有该长度,除非您创建一个新数组。

    usedLetters[letterIndex]
    将始终引发异常,因为数组基于0。换句话说,如果n是数组的长度,那么有效的索引是从0到n-1。当您传入长度为26的DisplayGuess时,数组如何为“空”?请显示更完整的代码,包括函数的调用方等@oldProgrammer-我现在正在编写更完整的代码…但是。如果我有一行
    char[]displayGuesss=newchar[26]它填充了什么?全新阵列,26个“插槽”,如果您愿意的话,没有数据元素分配给这26个插槽中的任何一个。这就是我说空的意思。当数组被定义时,里面真的有一些值吗?长度如何解析为空?这是一个
    int
    ?@JohnSaunders-我没想到会这样。根据问题中列出的假设,我假设“空”数组的长度为零,并且我可以使用整数变量作为数组的插槽号填充
    array[0]
    。这当然只能在第一次使用,但在第二次调用该方法时(长度为1),我希望填充
    array[1]
    …您能看到我使用该方法的目的吗?这就是为什么我试图理解为什么会出现越界错误。
    usedLetters[letterIndex]
    总是抛出一个ex