2010-01-19 149 views
9

我怎樣才能得到0作爲整數值從(int)null我想「(int)null」返回我0

編輯1:我想創建一個函數,它會返回默認值爲null表示在其各自的數據類型。

編輯2: 我怎麼能在這種情況下工作使用默認

(int)的值

哪裏值可以爲空或任意整數值。運行時我不知道數據類型的值。 但我會保證值應該只包含空值或整數值。

回答

21

您可以使用可空結構

int value = new Nullable<int>().GetValueOrDefault(); 

您也可以使用default關鍵字

int value = default(int); 

繼2日編輯:

你需要一個接收任何類型的參數的函數,所以會使用對象。你的功能類似於Field<T>擴展方法上DataRow

public static T GetValue<T>(object value) 
{ 
    if (value == null || value == DBNull.Value) 
     return default(T); 
    else 
     return (T)value; 
} 

使用該功能,如果你想要一個int(和你期望的值是一個int),你把它想:

int result = GetValue<int>(dataRow["Somefield"]); 
+0

我同意。無需重新發明輪子 - 使用構建語言功能 - 可爲空類型。 – 2010-01-19 20:08:38

+0

@ Pierre-Alain Vigeant:需要關於「新Nullable ().GetValueOrDefault();」的更多解釋關於它的工作原理和工作原理。我有點困惑使用不知道這種類型的語法代碼 – 2010-01-19 20:10:59

+4

@ShantanuGupta像'int?'這樣的可空類型提供了一種名爲GetValueOrDefault()的方法。如果值不爲null,則此方法返回值,如果值不爲null,則返回該類型的默認值(對於int爲0)。 – 2010-01-19 20:12:55

0

您不能將null轉換爲int,因爲int是值類型。你可以把它投到int?雖然。

你想實現什麼?

+0

@thecoop:我想做一個通用函數來爲我返回所有數據類型的默認值。 – 2010-01-19 20:00:00

34

您可以使用關鍵字default得到任何數據類型的默認值:

int x = default(int);  // == 0 
string y = default(string); // == null 
// etc. 

這適用於通用參數,以及:

Bar<T> Foo<T>() { 
    return new Bar<T>(default(T)); 
} 

如果您有object類型的變量可能含有nullint類型的值,可以使用nullable types?? operator將其安全地轉換爲整數:

int a = 42; 
object z = a; 
int b = (int?)z ?? 0;  // == 42 
int c = (int?)null ?? 0;  // == 0 
+3

+1:而且你也不需要使它成爲自己的功能。 – 2010-01-19 20:05:10

+1

+1爲??運營商。 – 2010-01-19 20:28:55

+0

+1,不知道默認關鍵字。 – iandisme 2010-01-19 21:20:22

1

返回對象的強制轉換實例或默認值的一般方法可以實現如下:

static T Cast<T>(object value) { 
    if (value is T) 
     return (T)value; 
    else 
     return default(T); 
} 

這樣,使用有效的值會產生本身的價值:

int value = Cast<int>(4); //value = 4 

和空值會得到默認:

int value = Cast<int>(null); //value = 0 

注意,因爲該方法需要對象作爲參數,這會在與struct對象(如int)一起使用時導致裝箱。

0

泛型類的方法不返回任何工作:

Class GetNull(Of T) 
     Public Shared Function Value() As T 
      Return Nothing 
     End Function 
End Class 



Debug.Print(GetNull(Of Integer).Value()) 
0

你需要的Nullable(Of Integer)返回類型。