这是使用关键字查找产品名称的代码。我得到“空引用异常”请解决此问题。我在if语句中遇到异常。
static void Main(string[] args)
{
try
{
int n;
string[] item = null;
string[] productName = new string[6];
string word;
int i;
bool flag = false;
Console.WriteLine("enter the no of products");
n = Convert.ToInt32(Console.ReadLine());
for (i = 0; i < n; i++)
{
productName[i] = Console.ReadLine();
}
Console.WriteLine("enter the keyword to search");
word = Console.ReadLine();
foreach (string item1 in productName)
{
if (item1.Contains(word)) //NullReferenceException
{
flag = true;
item = item1.Split(' ');
Console.WriteLine("item:" + item[0]);
}
}
if (!flag)
{
Console.WriteLine("not found");
Console.ReadLine();
}
}
catch (NullReferenceException e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
}
}
还有其他方法来编码吗?
答案 0 :(得分:2)
您的一个产品是null
。你正在为6分配空间..但如果你没有输入6 ..迭代它们会导致NullReferenceException
。
简单的解决方法是过滤掉它们:
foreach (string item1 in productName.Where(x => !string.isNullOrEmpty(x))
答案 1 :(得分:1)
if (item1 != null && item1.Contains(word))
答案 2 :(得分:0)
这里的问题是你正在初始化数组。
string[] productName = new string[6];
但是,如果您的输入n小于6,则最后几个项将为空。此外,如果n大于6,这将导致索引问题。
我建议,将此声明移到下面
n = Convert.ToInt32(Console.ReadLine());
,并将6更改为n。
string[] productName = new string[n];