2016-07-26 54 views
0

我想添加一個擴展方法爲int,稱爲TryParseNull,它接受一個字符串作爲輸入,並返回轉換的整數,如果成功或null,如果字符串不是一個有效的整數。不能將TryParseNull擴展方法添加到int在C#

我跟着這個職位的doubleMe例如:using extension methods on int

我的擴展方法聲明如下:

public static class IntExtensions { 
    public static int? TryParseNull(this string s) { 
     int dummy; 
     int? value; 
     if (int.TryParse(s, out dummy)) { 
      value = dummy; 
     } 
     else { 
      value = null; 
     } 
     return value; 
    } 
} 

但是當我嘗試使用它像這樣的編譯器抱怨說,它不知道TryParseNull是什麼。我嘗試了下面兩個。

int? myNum = int?.TryParseNull("1"); 
int? myNum = int.TryParseNull("1"); 

編輯:我認爲這個問題是參數this string s,但我傳遞一個字符串,所以我不知道如何糾正這一點。

編輯2:從下面的答案我可以看到問題是什麼,但是有沒有辦法讓語法int.TryParseNull("1")

+1

'「1」.TryParseNull()' –

+0

您不能將靜態方法添加到您不控制的類型。 – Will

回答

3

擴展方法適用於其'this'參數的實例,而不適用於類型。

而不是

int? myNum = int?.TryParseNull("1"); 

嘗試

int? myNum = "1".TryParseNull(); 

編輯: 順便說一下,你也可以靜態地用 '這個' 參數作爲第一個參數調用該方法。

int? myNum = IntExtensions.TryParseNull("1"); 
3

嘗試

int? myNum = "1".TryParseNull(); 

你的方法是延長string,不int?。它不會返回int?

0

int是一個框架提供的類型和添加是int執行原本不是一部分,所以你不能直接使用類型調用它,你就需要調用它的int實例的擴展方法正如其他人所指出的。