c# value type - C#中字符串和字符串有什麼區別?




15 Answers

string是C#for System.String的別名。
從技術上講,沒有區別。 這就像int System.Int32

就指南而言,通常建議您在引用對象時使用string

例如

string place = "world";

同樣,我認為如果您需要專門引用該類,通常建議使用String

例如

string greet = String.Format("Hello {0}!", place);

這是Microsoft在其示例中傾向於使用的樣式。

看來這個領域的指導可能已經改變,因為StyleCop現在強制使用C#特定的別名。

示例( 注意案例 ):

string s = "Hello world!";
String s = "Hello world!";

使用每種方法的準則是什麼? 有什麼區別




String代表System.String ,它是.NET Framework類型。 string System.String的C#語言中的別名 。 它們都被編譯為IL (中間語言)中的System.String ,因此沒有區別。 選擇你喜歡的並使用它。 如果你用C#編碼,我更喜歡string因為它是C#類型的別名,並且是C#程序員所熟知的。

關於intSystem.Int32等我可以這麼說。




string是保留字,但String只是一個類名。 這意味著string本身不能用作變量名。

如果由於某種原因你想要一個名為string的變量,你只會看到第一個這樣的編譯:

StringBuilder String = new StringBuilder();  // compiles
StringBuilder string = new StringBuilder();  // doesn't compile 

如果你真的想要一個名為string的變量名,你可以使用@作為前綴:

StringBuilder @string = new StringBuilder();

另一個重要區別:以不同的方式強調它們。




它已在上面介紹過; 但是,你不能在反射中使用string ; 你必須使用String




出於格式化原因,我更喜歡大寫的.NET類型(而不是別名)。 .NET類型的顏色與其他對像類型相同(畢竟,值類型是正確的對象)。

條件和控制關鍵字(如ifswitchreturn )是小寫的,並且是深藍色(默認情況下)。 而且我寧願在使用和格式方面沒有分歧。

考慮:

String someString; 
string anotherString; 



C#是與CLR一起使用的語言。

string是C#中的一個類型。

System.String是CLR中的一種類型。

當您將C#與CLR一起使用時, string將映射到System.String

從理論上講,您可以實現生成Java字節碼的C#編譯器。 這個編譯器的合理實現可能會將string映射到java.lang.String ,以便與Java運行時庫進行互操作。




string只是System.String的別名。 編譯器會以相同的方式處理它們。

唯一的實際區別是你提到的語法高亮,如果使用String ,你必須using System編寫。




兩者都是一樣的。 但從編碼指南的角度來看,最好使用string而不是String 。 這是開發人員通常使用的。 例如,我不使用Int32而是使用int因為intInt32別名

FYI“關鍵字字符串只是預定義類System.String的別名。” - C#語言規範4.2.3 http://msdn2.microsoft.com/En-US/library/aa691153.aspx




使用系統類型可以更容易地在C#和VB.Net之間進行移植,如果你是這樣的話。




stringSystem.String的別名(或簡寫)。 這意味著,通過鍵入string我們的意思是System.String 。 您可以在思考鏈接中閱讀更多內容: 'string'是System.String的別名/簡寫。




String不是關鍵字,可以用作標識符,而string是關鍵字,不能用作標識符。 而且在功能上看兩者都是一樣的。




我想在Ritchers的書中將這個添加到lfousts回答中:

C#語言規範指出,“作為一種風格,使用關鍵字比使用完整的系統類型名稱更受歡迎。”我不同意語言規範; 我更喜歡使用FCL類型名稱並完全避免基本類型名稱。實際上,我希望編譯器甚至不提供原始類型名稱,並強迫開發人員使用FCL類型名稱。以下是我的理由:

在我閱讀完整段落之前,我沒有得到他的意見。




沒有區別。

C#關鍵字string映射到.NET類型System.String- 它是一個保持語言命名約定的別名。

同樣,int映射到System.Int32




Daniel Solis的書中引用了這個問題。

所有預定義類型都直接映射到底層.NET類型。C#類型名稱(字符串)只是.NET類型(String或System.String)的別名,因此使用.NET名稱在語法上可以很好地工作,儘管不鼓勵這樣做。在C#程序中,您應該使用C#名稱而不是.NET名稱。




是的,他們之間沒有區別,就像boolBoolean




Related