1. 程式人生 > >C#使用String.Format()方法時,出現異常"輸入的字串格式有誤"的解決方法

C#使用String.Format()方法時,出現異常"輸入的字串格式有誤"的解決方法

     專案除錯時始終報錯“輸入的字串格式有誤”,苦苦尋找原因,終於定位到String.Format()方法,原來是在要用到轉義字元時,沒有進行轉義。修改後能正確執行的程式碼如下:

  #region innerHTML GoogleMap 
     string innerHTML =

            "   <style type=\"text/css\">html{{height:100%}}                                                          " +
            "	 body{{height:100%;margin:0px;padding:0px}}                                                         " +
            "	 #container{{height:100%}}                                                                          " +
            "	 </style><script type=\"text/javascript\" src=\"http://maps.google.com/maps/api/js?sensor=false\">  " +
            "	 </script><body>                                                                                    " +
            "   <div id=\"container\"></div>                                                                          " +
            "	 <script type=\"text/javascript\">                                                                  " +
            "	                                                                                                    " +
            "   var myLatlng = new google.maps.LatLng({0},{1});                                                       " +
            "   var myOptions = {{zoom: 12,                                                                           " +
            "   	               center: myLatlng,                                                                    " +
            "   	               mapTypeId: google.maps.MapTypeId.ROADMAP                                             " +
            "   	             }};                                                                                    " +
            "   var map = new google.maps.Map(document.getElementById(\"container\"), myOptions);                     " +
            "   var marker = new google.maps.Marker({{position: myLatlng,map: map,title:\"{2}\"}});                   " +

            "   </script>";
            #endregion

            string innerText = String.Format(innerHTML, Jd, Wd, Title);
            Frm51ditu.obj_frm51ditu.WebBrowserOf51ditu.DocumentText = innerText;

一、轉義字元

    C# 中使用類似 {0}, {1:yyyy-MM-dd} 這樣的格式佔位符,如果被格式化字串本身包含 { 或者 } 怎麼辦呢?

    答案:用兩個 { 或者 }連寫表示單個。

string str1 = String.Format("{{Hello}}, {0}, Now is {{{1:yyyy-MM-dd HH:mm:ss}}}",  "Jinglecat",  DateTime.Now); 
// {Hello}, Jinglecat, Now is {2007-07-18 23:06:35} 
string str2 = String.Format("{Hello}, {0}, Now is {{1:yyyy-MM-dd HH:mm:ss}}",  "Jinglecat",  DateTime.Now); 
// System.FormatException: 輸入字串的格式不正確。

    事實上,很多情況下帶特殊含義的字元都是這樣轉義的:如C#  中,當字串常量帶 @  前導的時候,用兩個 " 連寫表示一個 " (半形雙引號)
string str3 = @"My UserName is ""Jinglecat""."; // My UserName is "Jinglecat".
//string str4 = @"My UserName's "Jinglecat""; // error CS1002: 應輸入 ;
//string str5 = @"My UserName's \"Jinglecat\""; // error CS1002: 應輸入 ;
  SQL 字串常量,用兩個 ' 連寫表示一個 ' (半形單引號)
DECLARE @str6 varchar(100)
SET @str6 = 'My UserName is ''Jinglecat''.' 
PRINT @str6 -- My UserName is 'Jinglecat'.
    正則表示式中用,兩個 $ 連寫表示一個 $  (dollar) 
二、String Formatting in C#