C#中@的用法總結(jié)
本文實(shí)例匯總了C#中@的用法,對(duì)C#程序設(shè)計(jì)來(lái)說(shuō)有不錯(cuò)的借鑒價(jià)值。具體如下:
一 字符串中的用法
1.學(xué)過(guò)C#的人都知道C# 中字符串常量可以以@ 開頭聲名,這樣的優(yōu)點(diǎn)是轉(zhuǎn)義序列“不”被處理,按“原樣”輸出,即我們不需要對(duì)轉(zhuǎn)義字符加上 \ (反斜扛),就可以輕松coding。如,
string filePath = @"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.txt"
2.如要在一個(gè)用 @ 引起來(lái)的字符串中包括一個(gè)雙引號(hào),就需要使用兩對(duì)雙引號(hào)了。這時(shí)候你不能使用 \ 來(lái)轉(zhuǎn)義爽引號(hào)了,因?yàn)樵谶@里 \ 的轉(zhuǎn)義用途已經(jīng)被 @ “屏蔽”掉了。如,
@"""Ahoy!"" cried the captain." // 輸出為: "Ahoy!" cried the captain.
這有點(diǎn)像SQL中的單引號(hào)常量處理方式:
DECLARE @msg varchar(100) SET @msg = ''Ahoy!'' cried the captain.' -- 輸出為: 'Ahoy!' cried the captain.
3.@會(huì)識(shí)別換行符
其實(shí)這個(gè)特性,我不知道怎么描述,只是偶然發(fā)現(xiàn)的,先來(lái)看看下面的代碼:
string script = @" <script type=""type/javascript""> function doSomething() { } </script>";
這段代碼在cs文件中寫js,結(jié)構(gòu)就很清晰了,正常情況我們是這樣coding的:
string script2 = "<script type=\"type/javascript\">function doSomething(){}</script>";
或者:
string script3 = "<script type=\"type/javascript\">" + "function doSomething(){ " + "}</script>";
通常我們會(huì)選擇后者,因?yàn)閖s代碼一般比較長(zhǎng),或者方法體很大,或者需要連接其他變量,這樣結(jié)構(gòu)比較清晰。
注意:如果“拼接”的次數(shù)很多,應(yīng)該考慮使用StringBuilder了,有助于提高性能。
還有一種場(chǎng)景,也很常見,在程序中拼接 SQL 語(yǔ)句,如
private const string SQL_INS_USER = @" INSERT INTO t_User([UserName], [Password], Email) VALUES(@UserName, @Password, @Email)";
這樣就像寫存儲(chǔ)過(guò)程一般,保持相當(dāng)高的代碼清晰度。然而,我們需要關(guān)注一個(gè)問(wèn)題:字符串長(zhǎng)度看下面的測(cè)試代碼:
private const string SQL_INS_USER1 = @" INSERT INTO t_User([UserName], [Password], Email) VALUES(@UserName, @Password, @Email)"; private const string SQL_INS_USER2 = @"INSERT INTO t_User([UserName], [Password], Email) VALUES(@UserName, @Password, @Email)"; private const string SQL_INS_USER3 = @"INSERT INTO t_User([UserName], [Password], Email) VALUES(@UserName, @Password, @Email)"; static void Main(string[] args) { Console.WriteLine(SQL_INS_USER1.Length); // 126 Console.WriteLine(SQL_INS_USER2.Length); // 112 Console.WriteLine(SQL_INS_USER3.Length); // 86 }
這里可以看到三個(gè)字符串長(zhǎng)度分別相差了,14=126-112和26=112-86,注意觀察了,在代碼編輯器中,SQL_INS_USER1 中第一個(gè)換行符號(hào)之后,我縮進(jìn)13個(gè)空格(INSERT之前),而
SQL_INS_USER2 中第一個(gè)換行符號(hào)之后,我縮進(jìn)25個(gè)空格(VALUES之前),
那么,加上一個(gè)換行符,剛剛好 14和26
如此編寫代碼,雖然提高了代碼的清晰度和簡(jiǎn)便性,卻無(wú)行中帶來(lái)了另一個(gè)問(wèn)題:字符長(zhǎng)度!
很多場(chǎng)景下我們希望字符串越短越好,如,通過(guò)ADO.NET 發(fā)送 SQL 語(yǔ)句給數(shù)據(jù)庫(kù)執(zhí)行。
所以還是慎用之!
二 標(biāo)識(shí)符中的用法
在 C# 規(guī)范中, @ 可以作為標(biāo)識(shí)符(類名、變量名、方法名等)的第一個(gè)字符,以允許C# 中保留關(guān)鍵字作為自己定義的標(biāo)識(shí)符。
如下代碼:
class @class { public static void @static(bool @bool) { if (@bool) System.Console.WriteLine("true"); else System.Console.WriteLine("false"); } } class Class1 { static void M() { cl\u0061ss.st\u0061tic(true); } }
注意,@雖然出現(xiàn)在標(biāo)識(shí)符中,但不作為標(biāo)識(shí)符本身的一部分。
因此,以上示例,定義了一個(gè)名為 class 的類,并包含一個(gè)名為 static 的方法,以及一個(gè)參數(shù)名為了 bool 的形參。
這樣,對(duì)于跨語(yǔ)言的移植帶來(lái)了便利。因?yàn)椋硞€(gè)單詞在 C# 中作為保留關(guān)鍵字,但是在其他語(yǔ)言中也許不是。
相關(guān)文章
C# 獲取硬件參數(shù)的實(shí)現(xiàn)方法
這篇文章主要介紹了C# 獲取硬件參數(shù)的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10C#實(shí)現(xiàn).net頁(yè)面之間傳值傳參方法匯總
這篇文章主要介紹了C#實(shí)現(xiàn).net頁(yè)面之間傳值傳參方法,實(shí)例匯總了幾類常見的傳值傳參的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10C#將圖片存放到SQL SERVER數(shù)據(jù)庫(kù)中的方法
這篇文章主要介紹了C#將圖片存放到SQL SERVER數(shù)據(jù)庫(kù)中的方法,以實(shí)例形式較為詳細(xì)的分析了C#保存圖片到SQL Server數(shù)據(jù)庫(kù)的具體步驟與相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09Entity?Framework映射TPH、TPT、TPC與繼承類
這篇文章介紹了Entity?Framework映射TPH、TPT、TPC與繼承類,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06C# 當(dāng)前系統(tǒng)時(shí)間獲取及時(shí)間格式詳解
這篇文章主要介紹了C# 當(dāng)前系統(tǒng)時(shí)間獲取及時(shí)間格式詳解的相關(guān)資料,這里提供代碼實(shí)例,幫助大家學(xué)習(xí)參考,需要的朋友可以參考下2016-12-12