检查数组是否为null或为空
本文关键字:null 检查 是否 数组 | 更新日期: 2023-09-27 18:30:14
我对这行代码有一些问题:
if(String.IsNullOrEmpty(m_nameList[index]))
我做错了什么?
EDIT:在VisualStudio中,m_nameList用红色下划线,它表示"名称'm_nameList'在当前上下文中不存在"??
编辑2:我添加了更多的代码
class SeatManager
{
// Fields
private readonly int m_totNumOfSeats;
// Constructor
public SeatManager(int maxNumOfSeats)
{
m_totNumOfSeats = maxNumOfSeats;
// Create arrays for name and price
string[] m_nameList = new string[m_totNumOfSeats];
double[] m_priceList = new double[m_totNumOfSeats];
}
public int GetNumReserved()
{
int totalAmountReserved = 0;
for (int index = 0; index <= m_totNumOfSeats; index++)
{
if (String.IsNullOrEmpty(m_nameList[index]))
{
totalAmountReserved++;
}
}
return totalAmountReserved;
}
}
}
如果m_nameList
为null,它仍然会爆炸,因为它会试图找到要传递给String.IsNullOrEmpty
的元素。你会想要:
if (m_nameList == null || String.IsNullOrEmpty(m_nameList[index]))
这也是假设如果m_nameList
为非null,则index
将是有效的。
当然,这是在检查数组的元素是否为null或空,或者数组引用本身是否为null。如果只是想要检查数组本身(正如标题所示),则需要:
if (m_nameList == null || m_nameList.Length == 0)
编辑:现在我们可以看到你的代码,有两个问题:
- 正如Henk在他的回答中所展示的那样,当你需要一个字段时,你试图使用局部变量
您也将获得
ArrayIndexOutOfBoundsException
(一旦您使用了字段),原因如下:for (int index = 0; index <= m_totNumOfSeats; index++)
由于您的绑定,这将执行
m_totNumOfSeats + 1
迭代。您想要:for (int index = 0; index < m_totNumOfSeats; index++)
请注意,
m_nameList[m_totNumOfSeats]
无效,因为数组索引从C#中的0开始。因此,对于一个由5个元素组成的数组,有效索引为0、1、2、3、4。
GetNumReserved
方法的另一个选择是使用:
int count = 0;
foreach (string name in m_nameList)
{
if (string.IsNullOrEmpty(name))
{
count++;
}
}
return count;
或者使用LINQ,它是一条单行线:
return m_nameList.Count(string.IsNullOrEmpty);
(不过,你确定你没有弄错吗?我本以为预订应该是名称不是null或空的,而不是名称为null或空。)
如果它是错误的方式,它会是这样的LINQ:
return m_nameList.Count(name => !string.IsNullOrEmpty(name));
第2版之后:
您正在将m_nameList
定义为构造函数的局部变量
代码的其余部分需要它作为一个字段:
class SeatManager
{
// Fields
private readonly int m_totNumOfSeats;
private string[] m_nameList;
private double[] m_priceList;
// Constructor
public SeatManager(int maxNumOfSeats)
{
m_totNumOfSeats = maxNumOfSeats;
// Create arrays for name and price
m_nameList = new string[m_totNumOfSeats];
m_priceList = new double[m_totNumOfSeats];
}
....
}
为了避免错误,您可以在if中执行一些预条件,比如:
if(m_nameList == null || index < 0 || m_nameList.Length < index || String.IsNullOrEmpty(m_nameList[index]))
这应该在几乎任何条件下都能正常工作(不会导致错误)。。。