2008-09-23 28 views
5

Tôi có một lớp trợ giúp kéo chuỗi từ một tệp XML. Chuỗi đó là đường dẫn tệp (vì vậy nó có dấu gạch chéo ngược trong đó). Tôi cần phải sử dụng chuỗi đó vì nó là ... Làm thế nào tôi có thể sử dụng nó như tôi sẽ với lệnh chữ?Sử dụng chữ '@' bằng biến chuỗi

Thay vì điều này:

string filePath = @"C:\somepath\file.txt"; 

Tôi muốn làm điều này:

string filePath = @helper.getFilePath(); //getFilePath returns a string 

Đây không phải là cách tôi đang thực sự sử dụng nó; nó chỉ là để làm cho những gì tôi có nghĩa là một chút rõ ràng hơn. Có một số loại .ToLiteral() hoặc một cái gì đó?

Trả lời

13

Tôi không nghĩ bạn phải lo lắng về điều đó nếu bạn đã có giá trị. Toán tử @ là khi bạn chỉ định chuỗi (như trong đoạn mã đầu tiên của bạn).

Bạn đang cố gắng làm gì với chuỗi đường dẫn không hoạt động?

+1

wow ... quá lâu tại máy tính hôm nay ... đường dẫn tệp xml đã sai. Hoàn toàn không có lý do gì tôi cần làm những gì tôi đang cố gắng làm, cảm ơn vì đã đặt tôi thẳng ... Tôi cần phải đi ngủ! – naspinski

+0

Vâng, chỉ có các giá trị thoát duy nhất mà bạn không thể nhập hợp lệ vào chuỗi không đổi. Họ không cần phải thoát khi họ đã có trong một biến vì bạn không có hai ký tự cho \ n trong chuỗi của bạn, bạn có một dòng char mới. –

3

Tôi không chắc liệu mình có hiểu hay không. Trong ví dụ của bạn: nếu helper.getFilePath() trả về "c: \ somepath \ file.txt", sẽ không có vấn đề gì, vì @ chỉ cần thiết nếu bạn chỉ rõ một chuỗi có "". Khi chức năng "nói chuyện với nhau", bạn sẽ luôn luôn có được con đường chữ. Nếu XML chứa c: \ somepath \ file.txt và hàm của bạn trả về c: \ somepath \ file.txt, thì chuỗi filePath cũng sẽ chứa "c: \ somepath \ file.txt" là một đường dẫn hợp lệ.

2

Trong C# biểu tượng @ kết hợp với dấu ngoặc kép cho phép bạn viết chuỗi thoát. Ví dụ.

print(@"c:\mydir\dont\have\to\escape\backslashes\etc"); 

Nếu bạn không sử dụng thì bạn cần sử dụng ký tự thoát trong chuỗi.

http://msdn.microsoft.com/en-us/library/aa691090(VS.71).aspx

Bạn không cần chỉ định nó ở bất kỳ nơi nào khác trong mã. Trong thực tế làm như vậy nên gây ra một lỗi trình biên dịch.

1

Bạn đã chuyển nó về phía sau. Các @ -operator là để biến literals thành chuỗi, trong khi vẫn giữ tất cả các ký tự funky. Con đường của bạn đã là một chuỗi - bạn không cần phải làm gì cả. Chỉ cần mất @.

string filePath = helper.getFilePath(); 
1

Chuỗi trả về từ lớp trợ giúp không phải là chuỗi ký tự để bạn không cần sử dụng ký tự '@' để loại bỏ hành vi của dấu gạch chéo ngược.

1

@ "" chỉ giúp việc viết chuỗi ký tự trở nên dễ dàng hơn.

string (C# Reference, MSDN)

xâu Verbatim bắt đầu với @ và cũng được kèm theo trong dấu ngoặc kép.Ví dụ:

@"good morning" // a string literal

Ưu điểm của chuỗi nguyên văn là thoát chuỗi không được xử lý, mà làm cho nó dễ dàng để viết, ví dụ, một tên tập tin đầy đủ:

@"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.txt"

Một nơi mà tôi đã sử dụng nó là trong một mô hình regex:

string pattern = @"\b[DdFf][0-9]+\b";

Nếu bạn có một chuỗi trong một biến, bạn không cần phải thực hiện một "đen" ra khỏi nó, vì nếu nó là tốt hình thành, nó đã có nội dung chính xác.

Các vấn đề liên quan