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
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。