2011-05-03 63 views
2

有時ToString看起來很難看。
在下面的例子中,有更聰明的替換().ToString()嗎?有更好看的方法嗎? (int toString)

string value; 
int i; 
... 

value = (1 + i).ToString(); 

其次,你更喜歡什麼?

value = "0"; 

value = (0).ToString(); 

我知道我更喜歡「0」的可讀性,但它從另一方面不代表價值的方式作爲第二相同。現在,如果有某種ToString運算符...

Nitpicking,但我現在無聊。 ;)


附錄
這是我寫這引起了我要問上面的問題的代碼。

List<SelectListItem> result = new List<SelectListItem>(1 + items.Count); 

result.Add(new SelectListItem { Text = string.Empty, Value = "0" }); 
for (int i = 0; i < items.Count; ++i) 
{ 
    result.Add(new SelectListItem { 
     Text = items[i], 
     Value = (1 + i).ToString() 
    }); 
} 
+5

「醜」是一個主觀的術語。對我來說醜陋的東西可能對你很好,也可能對你很好。 (也是nitpicky。).ToString()的美(對我來說)是它的可讀性。它的使用非常普遍,所以不會誤認爲它的意思。 (對於相反的例子,考慮三元運算符...) – David 2011-05-03 20:42:29

+0

沒有更好的詞。但你是對的...我喜歡三元運算符。 ;) – 2011-05-03 20:46:13

+0

'「」+(1 + i)'如何抓住你? :-) – 2011-05-03 21:20:11

回答

1

ToString可能對本地化有用 - >(1000).ToString("N")。否則,我不明白你爲什麼要使用(0).ToString()而不是"0"

0

我總是使用string.Format("{0}", 1 + i)

我寧願去"0",爲什麼要調用一個額外的方法?

+0

+1我會做完全一樣的 – 2011-05-03 20:44:02

1

如果您需要將0表示爲整數,請不要使用字符串,而應使用整數。

至於轉換計算的結果爲字符串:

var res = string.Format("{0}", i + 1); 

你並不需要使用()與面值整數 - 0.ToString()作品。

+0

在我的情況下,SelectListItem.Value是一個字符串,我喜歡與否。 :) – 2011-05-03 20:44:50

+1

@Carl - 現在,你的問題出現在哪裏?我一定錯過了它... – Oded 2011-05-03 20:46:57

+0

@Downvoter - 關心評論? – Oded 2011-05-03 20:49:30

3

其實我總是用Convert.ToString(i + 1)而不是(i + 1).ToString()。前者是無效的。我不會使用value = (0).ToString()

編輯

因爲我真的很喜歡這種解決辦法的,我會試着更好的保護它:

優點:

  1. 這是很常見的成語,不特別很難閱讀。
  2. 它適用於值類型和引用類型 - 所以它增加了代碼內聚性,因爲所有轉換看起來完全一樣。
  3. 可用於代替大多數演員和轉換。
  4. 它是無效的 - 例如,在處理DAO類或UI綁定時非常有用。

缺點:

  1. 它比鑄模較慢(但並不比其他種的轉換必然慢,像object.ToString())。
  2. 可能會隱藏空引用異常 - 通常不建議在覈心業務類中使用這種異常(但同樣很少在該類代碼中使用文本到數字轉換)。
+4

我只會使用「無效」代碼,如果預計空值。意外的空*應該*導致異常,因爲這意味着有什麼問題。 – 2011-05-03 20:45:56

+0

@Matti Virkkunen:我不同意。如果存在從T到字符串period的有效轉換,則類型T中的* valid * null「value」可以表示爲空字符串。這不是一個錯誤*本身*。如果空值是*無效*,根據一些任意的業務規則,那麼你應該實施一些明確的驗證,以避免它。 – rsenna 2011-05-03 20:54:18

+0

@rsenna:如果您接受空字符串作爲空值,那麼它不是一個意外的空值。每次訪問時明確驗證事物會導致複雜且難以閱讀的代碼。檢查它們可能發生的位置,並相信非空值不會在其他地方奇蹟般地變爲空值。爲了清楚起見,我對海報作出了反應,說他總是*使用無效的方式,無論他是否希望空值。 – 2011-05-03 20:55:48

4

().ToString()是做第一件事最簡潔的方法。任何熟悉表達式工作的人都不應該在閱讀時遇到任何困難。

而做(0).ToString()就像做"a".ToCharArray()一樣愚蠢。如果你有一個字面值你想要的值,使用它。

+0

哦......這就解釋了它 - 你屬於那個組的SO用戶不僅回答問題,還試圖詆譭任何認爲不同的人。在你回答之前我沒有看到,但這解釋了你對評論我的答案的熱情。我只希望你找到Stack Overflow之外的生活,我的朋友...... :-) – rsenna 2011-05-03 21:28:04

+0

@rsenna:哦,我的生活並不侷限於Stack Overflow。我在互聯網的其他部分也花費了相當多的時間! – 2011-05-03 21:30:31

+0

無論如何,我給你+1。這似乎對你很重要。 – rsenna 2011-05-03 21:33:17

1

醜是這樣一個醜陋的詞。例如,對我來說,完全是主觀的,但是你的寫作風格1 + i顯然是錯誤的。數學家從不說1 + n,他們說n + 1。但這只是我的偏好。事關重大的事情在技術上很難回答。

+0

感謝您指出1 +我風格的問題。我認爲它總是把常量放在==的前面。它必須以某種方式擴大自己,將其他運營商納入我的腦海。 – 2011-05-03 21:41:17