C# params可变参数的使用注意详析
今天在一个.NETCore项目中调用一个自己实现的使用params可变参数的方法时触发了null引用异常,原以为是方法中没有对参数进行null值检查引起的,于是加上checknull代码:
publicstaticvoidBuildBlogPostLinks(paramsBlogPostDto[]blogPosts)
{
if(blogPosts==null)
return;
foreach(varblogPostinblogPosts)
{
//...
}
}
结果却出人意料,null引用异常继续,仔细看异常stack才发现原来null引用异常是在foreach时抛出的,需要在foreach时对blogPost进行checknull。
下面的示例代码可以验证这一点
classProgram
{
staticvoidMain(string[]args)
{
BuildBlogPostLinks(null);
BlogPostblogPost=null;
BuildBlogPostLinks(blogPost);
}
publicstaticvoidBuildBlogPostLinks(paramsBlogPost[]blogPosts)
{
if(blogPosts==null)
{
Console.WriteLine("blogPostsinnull");
return;
}
foreach(varblogPostinblogPosts)
{
if(blogPost==null)
{
Console.WriteLine("blogPostinnull");
}
else
{
Console.WriteLine("blogpost.Title:"+blogPost.Title);
}
}
}
}
publicclassBlogPost
{
publicstringTitle{get;set;}
}
运行时的输出结果是
$dotnetrun
blogPostsinnull
blogPostinnull
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。