2013-05-03 137 views
10

有沒有因爲他們都在做打印屏幕上的長度同一工作中使用{0}+之間的區別:{0}和+之間有什麼區別?

Console.WriteLine("Length={0}", length); 
Console.WriteLine("Length=" + length); 
+2

最終結果沒有任何區別,但在實現方式上肯定存在差異。 – 2013-05-03 20:30:09

+0

是的,C#區分大小寫,所以我們不能判斷長度是否與長度不同。 – 2013-05-03 20:31:31

+1

但是如果你想要更多的信息,第一行將在Intern池中有Length = {0},但是第二行將在Intern池中。 – 2013-05-03 20:32:30

回答

1

是有區別的。

例如:

Console.WriteLine("the length is {0} which is the length", length); 
Console.WriteLine("the length is "+length+" which is the length"); 

+連接兩個字符串,{0}是要插入一個字符串的佔位符。

+1

有沒有*真的*串聯和插入之間的區別?我看到的唯一區別是便利。 – Daniel 2013-05-03 20:31:42

+2

我會說格式*而不是*插入*,因爲它確實是'String.Format(...)'。 – 2013-05-03 20:32:11

+0

@Daniel我認爲值得區分 - 否則有些人可能會覺得你可以在任何地方使用「{0}」佔位符語法*。但是,您只能使用具有代碼來解釋字符串格式的方法。 – 2013-05-03 20:38:19

0

{n}其中n >= 0允許您以字符串中出現的順序替換值。

string demo = "demo", example = "example"; 
Console.WriteLine("This is a {0} string used as an {1}", demo, example); 

+讓你兩個或多個字符串拼接在一起。

Console.WriteLine("This is a " + demo + " string used as an " + example); 
+0

連接將實際上結束如下:'string.Concat(「這是一個」,演示,「字符串用作」示例);'編譯器完成後。 – asawyer 2013-05-03 20:35:31

2

第二行將創建一個字符串並將字符串輸出。 第一行將使用composite formatting,如string.Format。

Here是使用複合格式的一些很好的理由。

1

{n}是一個可用於多個選項的佔位符。 其中n是一個數字

在你的例子中它會有所作爲,最終結果將是兩個字符串串聯的結果。然而,在類似

var firstName = "babba"; 
var lastName ="abba"; 
var dataOfBirth = new Date(); 

Console 
    .Write(" Person First Name : {0} | Last Name {1} }| Last Login : {2:d/M/yyyy HH:mm:ss}", 
      firstName, 
      secondName, 
      dateOfBirth); 

它提供了一個易於閱讀界面,方便進行格式化

30

在您簡單的例子,有沒有什麼區別。但是有很好的理由可以選擇格式化({0})選項:它使得國際化軟件的本地化變得更加容易,並且使第三方編輯現有字符串變得更容易。

試想一下,比如你正在編寫產生此錯誤消息編譯:

"Cannot implicitly convert type 'int' to 'short'" 

你真的想編寫代碼

Console.WriteLine("Cannot implicitly convert type '" + sourceType + "' to '" + targetType + "'"); 

?天哪,沒有。你希望把這個字符串轉換成資源:

"Cannot implicitly convert type '{0}' to '{1}'" 

,然後寫

Console.WriteLine(FormatError(Resources.NoImplicitConversion, sourceType, targetType)); 

,因爲你有自由決定要改變這種狀況到:

"Cannot implicitly convert from an expression of type '{0}' to the type '{1}'" 

或者

"Conversion to '{1}' is not legal with a source expression of type '{0}'" 

這些選擇可以稍後由英語專業學生進行,無需更改代碼。

您也可以將這些資源翻譯成其他語言,再次而不更改代碼

現在開始始終使用格式化字符串;當你需要編寫可正確使用字符串資源的本地化軟件時,你已經習慣了。

+0

感謝解釋 – AK1 2013-05-03 21:28:57

+1

我在閱讀StackOverflow和之前的Joel博客的5年中使用格式化字符串的最佳參數。 – bricklayer137 2013-05-04 00:05:13

相關問題