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 ofbyte.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 中设置?