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
投稿
猜你喜欢
重新启动IDEA时maven项目SSM框架文件变色所有@注解失效
2021-12-08 06:42:23
java联调生成测试数据工具类方式
2021-10-12 06:42:17
SpringBoot+SpringCloud用户信息微服务传递实现解析
2022-12-08 13:51:42
Java中常见的5种WEB服务器介绍
2022-08-02 08:45:50
C# 调用腾讯即时通信 IM的示例
2021-10-29 16:31:17
Java详细讲解不同版本的接口语法和抽象类与接口的区别
2022-09-30 01:46:38
java结束进程的实例代码
2023-11-10 14:18:38
seata的部署和集成详细介绍
2023-06-05 08:33:24
spring mvc中@RequestBody注解的作用说明
2022-04-07 14:15:02
使用maven开发springboot项目时pom.xml常用配置(推荐)
2022-09-19 23:33:48
Servlet+JDBC实现登陆功能的小例子(带验证码)
2021-05-29 03:04:25
java构造函数示例(构造方法)
2022-05-08 19:06:03
简述Java中的四种引用类型
2023-11-29 00:46:56
一文带你学会规则引擎Drools的应用
2022-04-03 08:40:59
OpenCV + MFC实现简单人脸识别
2023-02-24 06:15:55
详解java中的Collections类
2022-02-14 16:30:00
Java中finally和return的关系实例解析
2023-05-31 04:21:31
C#微信公众号开发 微信事件交互
2023-04-22 21:18:31
解决spring.thymeleaf.cache=false不起作用的问题
2022-03-25 04:27:15
android编程实现对话框的封装实例
2022-02-12 12:58:54