日期:2014-05-18  浏览次数:20834 次

记得编译器会自动联接字符串,求证一下
1.   string   str   =   "a "   +   "b "   +   "c "   +   "d ";

      这样的字符串是否编译器会自动优化为 "abcd "   ?

2.   string   s1   =   ....;
      string   s2   =   "a "   +   "b "   +   s1   +   "c "   +   "d ";

      这样的字符串又是否会自动联接为 "ab "   +   s1   +   "cd "   ?

主要是在SQL语句的书写中   为了提高可读性
      string   sql   =   "INSERT   INTO   tablename   (...)   VALUES   ( "   +  
                                field1   +   ", "   +                         //   int
                                " ' "   +   field2   +   " ', "   +           //   string
                                " ' "   +   field3   +   " ', "   +           //   string
                                "to_date( ' "   +   field4   +   " ',   'yyyy-mm-dd '),   "   +           //datetime
                                .......;

这样写是否编译器会自动优化   不至于影响性能吧   有否必要一定把   " ',   "   +   " ' "   写成 " ',   ' "
一条小语句   也用不着StringBuilder吧

------解决方案--------------------
常量编译器会进行替换.

包括字符串.
------解决方案--------------------
编译器会自动联接字符串是在编译时字符串常量(变量不行)会生成拼接后的字符串代替原来的表达式 所以 "a " + "b " + "c " + "d ";在IL代码里会变成 "abcd " 而 "a " + "b " + s1 + "c " + "d ";要最决于s1是否是常量 拼接SQL语句建议使用String.Format