我有这个2d数组或结构
public struct MapCell
{
public string tile;
}
public MapCell[,] worldMap;
但是没有办法检查这个数组中是否存在密钥对......没有可用的方法。
我试着这样做
if (worldMap[tileX, tileY] != null) {
}
它不起作用:
Error 1 Operator '!=' cannot be applied to operands of type 'Warudo.MapCell' and '<null>'
和
if (worldMap[tileX, tileY].tile != null) {
它也不起作用(当它遇到非现有元素时弹出异常)。
Index was outside the bounds of the array.
那么,如何检查密钥对是否存在?
答案 0 :(得分:5)
你从未提到过你遇到的错误 - 数组越界或空引用。如果你的数组超出了界限,那么你应该在你的空检查之前加上......
// make sure we're not referencing cells out of bounds of the array
if (tileX < arr.GetLength(0) && tileY < arr.GetLength(1))
{
// logic
}
当然,最好只存储最大数组边界,而不是每次都得到它们的长度。
我也是第二个(第三个?)建议使用类而不是结构。
修改:您是否真的在初始化此字段?您尚未将其包含在代码示例中。例如worldMap = new MapCell[100,100];
,然后填充数组......
答案 1 :(得分:-2)
如果你正在使用一个struct值数组,它们总是存在(一旦构造了数组),但是在你设置它们之前有它们的默认值。
我建议在这里使用一个类而不是结构。这将允许您检查null,并且如果您要更改值,则会以预期的方式执行更多操作(根据名称,我希望...)
话虽如此,您可以检查结构中的字符串是否为null:
if (worldMap[tileX, tileY].tile != null)
{
// You've set the "tile" field inside of this "cell"...
这是有效的,因为struct的默认值初始化时所有引用(包括字符串)都为null。