为什么+运算符在任何空参数时都不会抛出任何异常?

时间:2015-01-16 13:57:57

标签: c# string null

对于我的无知感到抱歉,但是我已经尝试了很长时间没有合理的解释: 为什么+运算符在任何参数为null时不会抛出任何异常; 例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args) {

            string str = null;
            Console.WriteLine(str + "test");
            Console.ReadKey();
        }
    }
}

1 个答案:

答案 0 :(得分:8)

因为C#编译器会在您的操作中将+运算符转换为String.Concat method,并且当您尝试连接""时此方法使用空字符串null

来自documentation;

  

使用空字符串代替任何null参数。

来自7.7.4 Addition operator

  

binary +运算符在一个或两个时执行字符串连接   操作数是字符串类型。如果字符串连接的操作数是   null,替换空字符串。否则,任何非字符串   通过调用,将参数转换为其字符串表示形式   从类型对象继承的虚拟ToString方法。如果ToString   返回null,替换为空字符串。

同样来自reference source;

if (IsNullOrEmpty(str0))
{
     if (IsNullOrEmpty(str1))
     {
         return String.Empty;
     }
     return str1;
}