@符号在C尖锐中的意义是什么

本文关键字:是什么 符号 | 更新日期: 2023-09-27 17:59:47

可能的重复项:
.NET 字符串前面的 @ 是什么?

我知道使用@符号就像字符串的转义字符。

但是,我有以下行作为将文件存储到映射网络驱动器的路径:

String location = @"''192.168.2.10'datastore''" + id + "''";

以上工作正常,但现在我想从命令行获取一个字符串,所以我这样做了:

String location = @args[0] + id + "''";

以上不起作用,似乎我的斜杠没有被忽略。这是我的命令:

MyProgram.exe "''192.168.2.10'datastore''"

如何恢复@符号的效果?

@符号在C尖锐中的意义是什么

它用于两件事:

  • 创建"逐字"字符串(忽略转义字符(:string path = @"C:'Windows"
  • 转义语言关键字以将其用作标识符:string @class = "foo"

在您的情况下,您需要这样做:

String location = args[0] + id + @"''";

字符串文字前面的 @ 符号告诉编译器忽略和转义字符串中的序列(即以斜杠开头的内容(,只是"按原样"创建字符串

它还可用于创建名称为保留工作的变量。例如:

int @class=10;

如果不在 @ 前面加上前缀,则会收到编译时错误。

您还可以将其前缀为非保留字的变量:

int @foo=22;

请注意,您可以在代码中将变量引用为 foo@foo

@ 前缀表示字符串是文字字符串,编译器不执行转义字符的处理,因此:

@"'n"

未转换为换行符。没有它,您将拥有:

String location = "''''192.168.2.10''datastore''''" + id + "''''";

看起来有点乱。"@"稍微整理了一下。"@"只能以字符串常量为前缀,即一对双引号 ("( 内的内容。由于它是一个编译器指令,它只在编译时应用,所以字符串必须在编译时知道,因此,

@some_string_var

不像你想象的那样工作。但是,由于"@"所做的只是停止编译器对转义字符的处理,因此变量中的字符串中已经包含转义字符值(10,13 表示"'"等(。如果您想将"'"转换为 10,13,例如在运行时,您需要自己解析它以进行所需的替换(但我相信有人知道更好的方法(。

要得到你想要的,请执行以下操作:

String location = args[0] + id + "''";

@符号在 C# 中有两种用途。

  1. 使用引号而不是转义。 "''windows"可以表示为@"''windows"。 "约翰!"可以表示为@""约翰!""。
  2. 转义变量名称(例如,使用关键字作为参数名称(

    私有静态空隙 InsertSafe (字符串项、对象@lock( { 锁 (@lock( { 我的名单。插入(0,项(; } }

@ 引号字符串文本以 @ 开头,并用双引号引起来。例如:

@"good morning"  // a string literal

@-quoteting 的优点是不处理转义序列,这使得编写(例如(完全限定的文件名变得容易:

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

要在 @ 引号字符串中包含双引号,请将其加倍:

@"""Ahoy!"" cried the captain." // "Ahoy!" cried the captain.

@ 符号的另一个用途是使用恰好是 C# 关键字的引用 (/reference( 标识符。有关更多信息,请参阅 2.4.2 标识符。

http://msdn.microsoft.com/en-us/library/362314fe(v=vs.71(.aspx

在这种情况下,您可能不需要使用 @;只需制作即可

String location = args[0] + id + "''";
@

符号仅与代码中的字符串文本相关。 变量不应修改字符串的内容。

@ 符号位于引号之前。它仅适用于字符串文字,它只是改变了编译器理解字符串的方式。它的主要作用是使'被解释为字面反斜杠,而不是转义下一个字符。所以你想要:

String location = args[0] + id + @"''";

默认情况下,"''"字符是 C# 中字符串的转义字符。这意味着如果你想在你的字符串中有一个反斜杠,你需要两个斜杠,第一个斜杠来转义第二个斜杠,如下所示:

string escaped = "This is a backslash ''";
//The value of escaped is - This is a backslash '

一个更容易遵循的例子是使用引号:

string escaped = "To put a '" in a string you need to escape it";
//The value of escaped is - To put a " in a string you need to escape it

@ 符号等效于"忽略此字符串中的所有转义字符"并逐字声明。如果没有它,您的第一个声明将如下所示:

"''''192.168.2.10''datastore''''" + id + "''";

请注意,第二个字符串上已经没有 @,因此该字符串没有更改,仍然只包含一个反斜杠。

只需在声明字符串时使用 @ 符号。由于您的参数已经声明,因此不需要。因此,您的新生产线可以是:

String location = args[0] + id + "''";

String location = args[0] + id + @"'";

如果从命令行加载,则它已经被转义了。这就是为什么从你的角度来看,你的逃避被"忽略"了。请注意,从配置加载时也是如此,因此不要这样做:

<add key="pathToFile" value="C:''myDirectory''myFile.txt"/>

如果这样做,最终会得到双字符串,因为".NET"足够聪明,可以在以这种方式加载它们时为您逃脱精简。