C# params可变参数的使用注意详析
作者:dudu 时间:2021-10-29 12:33:27
今天在一个 .NET Core 项目中调用一个自己实现的使用 params 可变参数的方法时触发了 null 引用异常,原以为是方法中没有对参数进行 null 值检查引起的,于是加上 check null 代码:
public static void BuildBlogPostLinks(params BlogPostDto[] blogPosts)
{
if (blogPosts == null)
return;
foreach (var blogPost in blogPosts)
{
//...
}
}
结果却出人意料, null 引用异常继续,仔细看异常 stack 才发现原来 null 引用异常是在 foreach 时抛出的,需要在 foreach 时对 blogPost 进行 check null 。
下面的示例代码可以验证这一点
class Program
{
static void Main(string[] args)
{
BuildBlogPostLinks(null);
BlogPost blogPost = null;
BuildBlogPostLinks(blogPost);
}
public static void BuildBlogPostLinks(params BlogPost[] blogPosts)
{
if (blogPosts == null)
{
Console.WriteLine("blogPosts in null");
return;
}
foreach (var blogPost in blogPosts)
{
if (blogPost == null)
{
Console.WriteLine("blogPost in null");
}
else
{
Console.WriteLine("blogpost.Title: " + blogPost.Title);
}
}
}
}
public class BlogPost
{
public string Title { get; set; }
}
运行时的输出结果是
$ dotnet run
blogPosts in null
blogPost in null
来源:https://www.cnblogs.com/dudu/p/11228948.html
标签:c#,params,可变参数
0
投稿
猜你喜欢
Android实现简单画图画板
2022-04-02 12:52:56
C#直线的最小二乘法线性回归运算实例
2022-05-03 11:19:33
常用Eclipse快捷方式(推荐)
2022-01-22 04:37:56
java中的基础运算符
2022-06-23 04:19:38
总结一次C++ 程序优化历程
2023-11-02 22:38:30
c#编写的番茄钟倒计时器代码
2023-02-23 12:21:50
详解java 中泛型中的类型擦除和桥方法
2021-07-10 23:55:08
永久解决idea git log乱码的问题
2022-01-10 06:13:13
Java应用多机器部署解决大量定时任务问题
2023-10-28 17:07:17
Java内存溢出和内存泄露
2023-01-21 17:48:48
java swing实现QQ账号密码输入框
2023-01-13 06:26:52
Socket通信原理和实践
2022-07-05 02:42:31
Java常量池知识点总结
2023-01-09 10:23:09
关于IDEA配置文件字符集的问题
2022-11-01 13:06:44
Java递归基础与递归的宏观语意实例分析
2021-06-24 09:33:10
c#使用filesystemwatcher监视文件系统的变化
2022-08-06 15:28:43
java实现1M图片压缩优化到100kb实现示例
2022-08-08 03:59:43
解析Java内存分配和回收策略以及MinorGC、MajorGC、FullGC
2023-02-06 08:22:19
java图片滑动验证(登录验证)原理与实现方法详解
2023-07-10 13:29:53
android跑马灯出现重复跳动以及不滚动问题的解决方法
2023-07-24 00:33:48