C#,抛出错误试图从二维数组中获取值并在 TryParse 中使用它

Posted

技术标签:

【中文标题】C#,抛出错误试图从二维数组中获取值并在 TryParse 中使用它【英文标题】:C#, Throws error what trying to get value from two dimensional array and uses it in TryParse 【发布时间】:2021-11-26 13:06:21 【问题描述】:
private static char[,] boardValues = 
    '1', '2', '3',
    '4', '5', '6',
    '7', '8', '9'
;

public static bool SetPlayerLocation(int[] location, char character)

    // check if slot is taken
    if (byte.TryParse(boardValues[location[0],location[1]], out _))
    
        boardValues[location[0], location[1]] = character;
        return true;
    
    else
    
        return false;
    

这一直抛出错误,无法在if 语句的行上从“char”转换为“System.ReadOnlySpan<char>”。

【问题讨论】:

有no overload of byte.TryParse which takes a char。你可能需要先把它变成一个字符串:byte.TryParse(boardValues[...].ToString(), out _) 但是,只检查 char 是否在 0 到 9 之间会更好吗? if (boardValues[...] is >='0' and <='9') @CaiusJard 是的,尽管从中减去“0”更容易 哈,是的,我忘记了这些事情。虽然只有一个按键:D 我查看了 TryParse 并假设您正在尝试转换,例如一个 char '0' 到一个数字 0,所以我指出你可以通过减去 0x30('0' 的十六进制代码,我发现它比十进制 48 更容易记住,因为 0x30 和 0 都是以 0 结尾,“7”的十六进制代码是 0x37 等)。然后安东尼指出,减去'0'会更容易...... 【参考方案1】:

您从未说过“已使用”是什么意思,但它看起来可能是“'0''9' 之间的一个字符” - 也许“未使用”的插槽有一个空格 ' ''x' 在里面.. 或类似的..

因此,您拥有的这段代码本质上似乎是为了检查数字的存在,为此我建议:

private static char[,] boardValues = 
    '1', '2', '3',
    '4', '5', '6',
    '7', '8', '9'
;

public static bool SetPlayerLocation(int[] location, char character)

    var slotTaken = Char.IsDigit(boardValues[location[0],location[1]]);

    if (slotTaken)
        boardValues[location[0], location[1]] = character;
    
    return slotTaken;

如果我们用一个合理的变量名让代码更加自我记录,我们可以取消注释..

..这让我怀疑逻辑是否真的正确 - 如果占用了一个插槽,那么您可以替换它吗?

应该将变量称为slotFree 吗? if 应该是 if(!slotTaken),还是玩家只能占用已占用的位置真的正确吗?只有你知道这一点,但这是一个很好的介绍如何创建自我记录、可读的代码可以帮助通知其他人阅读它(当你离开时接管你工作的人:D)或发现错误

【讨论】:

只是检查该位置的字符是数字(例如“0”、“1”等)还是值“X”或“O”。 Char.isDigit() 方法解决了问题

以上是关于C#,抛出错误试图从二维数组中获取值并在 TryParse 中使用它的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Access 数据库中获取值并在 C# winforms Devexpress 的 Gridview 中设置?

从数组中获取随机值并在 DOM 中发布

C#从函数返回二维数组索引

如何从数组中获取值并在zend框架工作中分配给视图

试图从 C# 中的结构数组中删除一个条目。获取相互矛盾的信息?

如何从 TextField 获取十进制值并在 Objective C 中使用它进行计算