.net中params以前没关注过的一个现象

Posted lanpang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net中params以前没关注过的一个现象相关的知识,希望对你有一定的参考价值。

  在看别人写的ado库的时候,有这样一个判断

        private static void PrepareCommand(mysqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, string cmdText, MySqlParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            if (trans != null)
                cmd.Transaction = trans;
            cmd.CommandType = CommandType.Text;//cmdType;
            if (cmdParms != null)
            {
                foreach (MySqlParameter parameter in cmdParms)
                {
                    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                        (parameter.Value == null))
                    {
                        parameter.Value = DBNull.Value;
                    }
                    cmd.Parameters.Add(parameter);
                }
            }
        }

  就是红色的那部分。

 

  自己试了试,发现如果参数里有像 类似 params object[] Parameters,这种参数的,这个Parameters变量永远不会为null,如果真的没有写任何参数,那么.net会默认给一个

  object[0]的数组放到这个参数里面。那么这样以后再用这个参数,直接放心用Foreach就行了。

  顺便贴上测试的小例子。

  

        static void Main(string[] args)
        {
            Work();
            Console.WriteLine("This is the end of program");
            Console.ReadKey(true);
        }

        private static void Work(params string[] strParam)
        {
            if (strParam == null)
            {
                Console.WriteLine("没有任何参数");
            }
            else {
                Console.WriteLine("参数不为空");
            }
        }

 

以上是关于.net中params以前没关注过的一个现象的主要内容,如果未能解决你的问题,请参考以下文章

一次网络不通的奇怪现象处理

Mybatis中@param注解

oracle 中怎样查看以前执行过的SQL语句?

芯片流片失败的故事

。Net Core 3.0 HTML Helper

ESXI上的新建虚机绑定已使用过的静态ip无法ping通网关的奇怪现象