首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用params关键字时出现空引用是怎么回事?

问题阐述

C#中,使用params关键字修饰object类型的数组并作为方法的参数类型,可以解决方法参数不确定的问题,但这里有一个问题,如果调用方法的时候传入的参数是通过某种途径获得的,并且不确定它的值是否为空,那么就有可能把空值传入到方法中,这时,如果方法中的代码逻辑编写得不够严谨,就会产生运行时错误。

专家解答

下面通过一个实例演示为什么使用params关键字时会出现空引用,及其解决方法。

1.问题产生的场景

本实例中,首先定义一个ShowInfo方法,该方法中使用params类型作为参数,然后在Main方法中调用ShowInfo方法,并向该方法传入一个字符串、一个整数、一个null空值,主要代码如下:

class Program

{

//应用程序入口方法

staticvoid Main(string[] args)

{

Program p = new Program();

p.ShowInfo("bccd", 100, null);

}

//自定义方法,实现输出该方法自身的参数列表

privatevoid ShowInfo(params object[] parameters)

{

string strOutPut = string.Empty;

for(int i = 0; i

{

strOutPut += parameters[i].ToString() + "\r\n";

}

Console.WriteLine("参数列表:\n",strOutPut);

Console.Read();

}

}

编译后在运行过程中出现空引用异常提示,如图7.14所示。

图7.14 空引用异常提示

2.问题分析

在出现异常的语句处设置断点,并添加对for语句的局部变量i的快速监视,如图7.15所示。

图7.15 变量i的快速监视窗口

通过查看快速监视得知,出现问题的参数索引值为2,也就是ShowInfo方法在被调用时传入的第3个参数,由于该参数被传入了空值,所以在调用Tostring方法时产生了空引用异常。

3.问题的解决方法

解决办法就是修改ShowInfo方法中的代码,增加关于空值的逻辑判断,然后对空值的情况作特殊处理,修改后的代码如下:

private void ShowInfo(params object[] parameters)

{

stringstrOutPut = string.Empty;

for (inti = 0; i

{

if(parameters[i] == null) //如果参数值为空值

{

strOutPut += "null" + "\r\n"; //对输出字符串做特殊处理

}

else //如果参数值不为空

{

strOutPut += parameters[i].ToString() + "\r\n"; //保持原有的输出格式

}

}

Console.WriteLine("参数列表:\n", strOutPut);

Console.Read();

}

注意:在方法声明中,params关键字之后不允许有任何其他参数,并且在方法声明中只允许有一个params关键字。

专家点评

在编写方法时,可能会遇到这样的问题,不确定这个方法要传入多少个参数,或者随着程序的开发进度,该方法的参数会发生很大变化,为了支持不确定个数的参数传入,在C#中可以使用params关键字来修饰方法的参数。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180610B0P8UP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券