C# params可变参数的使用注意详析

2022-10-16,,

今天在一个 .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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

《C# params可变参数的使用注意详析.doc》

下载本文的Word格式文档,以方便收藏与打印。