2010-03-31 42 views
0

是更好地使用下面的語句是更好地使用Convert.ToInt32 「0」 級聯()函數調用

Convert.ToInt32( 「0」 + stringValue的)

如果沒有,那麼爲什麼呢?

我知道用戶int.TryParse()函數更好,但是上面的語句怎麼樣。

+0

爲什麼你會想要* * t o使用該構造? – 2010-03-31 05:05:56

+0

我不想使用它,因爲它具有字符串連接,但是我看到了那段代碼,我想知道從別人那裏使用該語句的原因,因爲我正在處理別人的代碼。 – 2010-03-31 05:07:37

+0

這是錯誤的代碼。寫它的人試圖「太聰明」......我會刪除它,並直接使用TryParse或Convert。 – 2010-03-31 05:12:15

回答

5

比什麼好?

就我個人而言,我認爲使用Convert.ToInt32("0" + stringValue)是一種反模式。

它沒有提供任何有用的,因爲:

  • 一個正整數,仍將導致相同的值。
  • 如果你傳遞一個負數,它會拋出。
  • 它不添加任何額外的錯誤檢查
  • 它創建一個額外的字符串連接,這是不使用任何東西,降低性能無故
  • 它增加了額外的複雜性沒有任何理由。

只需直接使用Convert.ToInt32(stringValue)int.TryParse如果您不想執行異常處理。

+0

+1這正是我打字時的一半,但你有一些額外的點。我真的沒有看到任何理由,但可以看到反對它的多種原因。 – Jay 2010-03-31 05:04:32

+0

我的意思是我看到一些代碼,開發人員使用此語句將字符串轉換爲int值,因爲您知道int.TryParse更好,因爲它不會拋出execption,在Convert.ToInt32(「0」+ stringValue)它不會拋出execption,但正如你可以看到一個字符串連接的附加操作在那裏。這就是爲什麼我要求更好地使用它? – 2010-03-31 05:05:19

+0

@Asim:不是。它仍然可以拋出異常... – 2010-03-31 05:09:32

1

只有當字符串變量是空引用時,唯一可以使用的情況是。儘管如此,連接零個字符完全沒有意義。當我們用字符串連接進行空校驗後只是,一個更好的版本將與空字符串拼接而是爲不爲負值突破:

Convert.ToInt32(String.Empty + stringValue) 

更好的解決方案,因爲它不做一個字符串連接:

Convert.ToInt32(stringValue ?? String.Empty) 

一個更好的解決辦法是檢查空值第一,這樣你就不必解析已知的字符串:

stringValue == null ? 0 : Convert.ToInt32(stringValue)