ลำดับการหลีกเลี่ยงที่ไม่รู้จักสำหรับสตริงพา ธ ที่มีแบ็กสแลช


93

โค้ดต่อไปนี้สร้างข้อผิดพลาดของคอมไพเลอร์เกี่ยวกับ "ลำดับการหลีกเลี่ยงที่ไม่รู้จัก" สำหรับแบ็กสแลชแต่ละตัว:

string foo = "D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";

ฉันเดาว่าฉันต้องหนีแบ็กสแลช? ฉันจะทำอย่างไร?

คำตอบ:


227

คุณสามารถใช้แบ็กสแลชคู่ได้ทุกครั้ง

string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";

หรือใช้สัญลักษณ์ @

string foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";

นอกจากนี้ยังช่วยในการแก้ไขปัญหา Html.TextBoxFor ที่ฉันมี การใช้ @ ก่อนนิพจน์ทั่วไปจะแก้ไขลำดับการหลีกเลี่ยงที่ไม่รู้จักโดยที่แบ็กสแลชคู่ล้มเหลว
Joshua

29

ลองสิ่งนี้:

string foo = @"D:\Projects\Some\Kind\Of\Pathproblem\wuhoo.xml";

ปัญหาคือในสตริง a \เป็นอักขระหลีก การใช้@เครื่องหมายแสดงว่าคุณบอกให้คอมไพเลอร์ละเว้นอักขระหลีก

คุณสามารถทำได้โดยการหลีกเลี่ยง\:

string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";

4
FWIW และเพื่อช่วย Googlebot คำว่า @ "" คือ "อักษรสตริงคำต่อคำ" แม้ว่าฉันจะเคยได้ยินว่ามันเรียกว่า "สตริงลิเทอรัล" แต่ในทางเทคนิคก็รวมถึง msdn.microsoft.com/en-us/library/aa691090(VS.71).aspx
Mark Brackett


9

หากสตริงของคุณเป็นพา ธ ไฟล์ดังในตัวอย่างคุณยังสามารถใช้พา ธ ไฟล์สไตล์ยูนิกซ์ได้:

string foo = "D:/Projects/Some/Kind/Of/Pathproblem/wuhoo.xml";

แต่คำตอบอื่น ๆ มีวิธีแก้ปัญหาทั่วไปมากกว่าในการหนีสตริงใน C #


5
string foo = "D:\\Projects\\Some\\Kind\\Of\\Pathproblem\\wuhoo.xml";

สิ่งนี้จะได้ผลหรือตัวอย่างก่อนหน้านี้ก็เช่นกัน @ "... " หมายถึงรักษาทุกสิ่งระหว่างเครื่องหมายคำพูดตามตัวอักษรดังนั้นคุณสามารถทำได้

@"Hello
world"

เพื่อรวมบรรทัดใหม่ตามตัวอักษร ฉันอายุมากขึ้นและชอบหนี "\" ด้วย "\\"


แต่คู่ "ไม่ได้รับการปฏิบัติอย่างแท้จริง
Winger Sendon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.