2016-05-30 27 views
-8

我需要幫助來創建方法輕鬆地將字符串轉換爲int像Object.ToString()方法。C#創建Object.ToInt()像Object.ToString()

public int Object.ToInt(){ 
     ????????? 
    } 

請幫我創建這個方法。

我可以使用它嗎?

public static class MyExtensions 
{ 
    public static int ToInt32(this object Str) 
    { 
     if (Str != null && Str.ToString().Length > 0) 
     { 
      try 
      { 
       return Convert.ToInt32(Str); 
      } 
      catch { return default(int); } 
     } 
     return default(int); 
    } 
} 
+6

您需要詳細瞭解[擴展方法](https://msdn.microsoft.com/en-us/library/bb383977.aspx)。 –

+0

傳遞字符串'「Hello world」'時你的方法的結果是什麼?如果你自己無法回答這個問題,那麼計算機無法做到。 –

+0

@GediminasMasaitis我想使用的方法可能最終會被轉換與否。敞篷車取決於我在哪裏我稱這種方法。是真的嗎? –

回答

0

該方法已存在 - Object.GetHashCode

雖然它可能不會完成你想做的事情 - 但請記住,實際上不可能做你想做的事情,而且這種方法確實會爲每個對象產生一個整數。

你可能也想看看Convert.ToInt32。它會做更多你期望的事情,但它不會適用於每個對象 - 對於大多數情況下,你會得到一個InvalidCastException

4

您可以創建一個extension method

public static class EX 
{ 
    public static int ToInt32(this object o) 
    { 
     if (o == null) 
     { 
      return default(int); 
     } 

     return Convert.ToInt32(o); 
    } 
} 
+0

如果參數不是數字或甚至很長,則失敗。也許爲了簡單起見省略了一些異常處理? – HimBromBeere

+0

同意。但是,這將包括每個解決方案,對吧? –

+0

不適用於'ToString',您可以在其中使用任何**對象(但結果可能很奇怪)。 – HimBromBeere

0

這聽起來好像是一個非常糟糕的主意。當創建那些所謂的extension-methods時,你應該問自己是否每object的實例可以轉換爲int,我懷疑是你期望的。當用戶這樣寫:

ToInt("anyString"); 

但是你可以想象任何任意對象的字符串表示。所以你最好定義一個輔助類來轉換你的號碼,或者直接調用int.Parse