Reputation: 34717
I have a helper class pulling a string from an XML file. That string is a file path (so it has backslashes in it). I need to use that string as it is... How can I use it like I would with the literal command?
Instead of this:
string filePath = @"C:\somepath\file.txt";
I want to do this:
string filePath = @helper.getFilePath(); //getFilePath returns a string
This isn't how I am actually using it; it is just to make what I mean a little clearer. Is there some sort of .ToLiteral() or something?
Upvotes: 7
Views: 27233
Reputation: 181124
I'm not sure if I understand. In your example: if helper.getFilePath()
returns "c:\somepath\file.txt"
, there will be no problem, since the @
is only needed if you are explicitely specifying a string with "".
When Functions talk to each other, you will always get the literal path. If the XML contains c:\somepath\file.txt
and your function returns c:\somepath\file.txt
, then string filePath will also contain c:\somepath\file.txt
as a valid path.
Upvotes: 4
Reputation: 28583
The @"" just makes it easier to write string literals.
Verbatim string literals start with @ and are also enclosed in double quotation marks. For example:
@"good morning" // a string literal
The advantage of verbatim strings is that escape sequences are not processed, which makes it easy to write, for example, a fully qualified file name:
@"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.txt"
One place where I've used it is in a regex pattern:
string pattern = @"\b[DdFf][0-9]+\b";
If you have a string in a variable, you do not need to make a "literal" out of it, since if it is well formed, it already has the correct contents.
Upvotes: 3
Reputation: 52608
The string returned from your helper class is not a literal string so you don't need to use the '@' character to remove the behaviour of the backslashes.
Upvotes: 1
Reputation: 26374
You've got it backwards. The @-operator is for turning literals into strings, while keeping all funky characters. Your path is already a string - you don't need to do anything at all to it. Just lose the @.
string filePath = helper.getFilePath();
Upvotes: 1
Reputation: 4547
In C# the @ symbol combined with doubles quotes allows you to write escaped strings. E.g.
print(@"c:\mydir\dont\have\to\escape\backslashes\etc");
If you dont use it then you need to use the escape character in your strings.
http://msdn.microsoft.com/en-us/library/aa691090(VS.71).aspx
You dont need to specify it anywhere else in code. In fact doing so should cause a compiler error.
Upvotes: 2
Reputation: 3213
I don't think you have to worry about it if you already have the value. The @ operator is for when you're specifying the string (like in your first code snippet).
What are you attempting to do with the path string that isn't working?
Upvotes: 14