一尘不染

字符串=字符串+整数:背后是什么?

c#

在C#中,您可以隐式连接一个字符串,比方说一个整数:

string sth = "something" + 0;

我的问题是:

  1. 为什么,假设您可以隐式地将一个字符串和一个int串联在一起,C#不允许像这样初始化字符串:

    string sth = 0; // Error: Cannot convert source type 'int' to target type 'string'
    
  2. C#如何将0转换为字符串。它是0.ToString()或者(string)0还是其他什么东西?

  3. 如何找到上一个问题的答案?


阅读 247

收藏
2020-05-19

共1个答案

一尘不染

它编译为对的调用String.Concat(object, object),如下所示:

string sth = String.Concat("something", 0);

(请注意,该特定行实际上将由编译器进行优化)

该方法的定义如下:(来自.Net参考源)

    public static String Concat(Object arg0, Object arg1) {
        if (arg0==null) {
            arg0 = String.Empty; 
        }

        if (arg1==null) { 
            arg1 = String.Empty;
        } 
        return Concat(arg0.ToString(), arg1.ToString());
    }

(此电话String.Concat(string, string)


要发现这一点,您可以使用ildasm或Reflector(在IL或C#中,不做任何优化)来查看+行被编译成的内容。

2020-05-19