在产品列表中查找关键字

时间:2013-12-30 11:36:54

标签: c# console-application

这是使用关键字查找产品名称的代码。我得到“空引用异常”请解决此问题。我在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();
            }
        }

还有其他方法来编码吗?

3 个答案:

答案 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];