C#使用String.Format()方法時,出現異常"輸入的字串格式有誤"的解決方法
阿新 • • 發佈:2019-02-06
專案除錯時始終報錯“輸入的字串格式有誤”,苦苦尋找原因,終於定位到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#
略