toint32 - string轉int c#




如何將C#可空int轉換為int (10)

如何將可空int轉換為int ? 假設我有兩種類型的int,如下所示:

int? v1;  
int v2; 

我想把v1的值賦給v2v2 = v1; 會導致錯誤。 如何將v1轉換為v2


GetValueOrDefault()

檢索對象的值。 如果它為null,則返回int的默認值,即0。

例:

v2= v1.GetValueOrDefault();


v1v2之間的簡單轉換是不可能的,因為v1的值域大於v2 。 這是v1可以容納的所有東西加上null狀態。 要進行轉換,您需要明確指出int什麼值將用於映射null狀態。 最簡單的方法是?? 操作者

v2 = v1 ?? 0;  // maps null of v1 to 0

這也可以長時間完成

int v2;
if (v1.HasValue) {
  v2 = v1.Value;
} else {
  v2 = 0;
}

到目前為止的其他答案都是正確的; 我只是想添加一個稍微更乾淨的:

v2 = v1 ?? default(int);

任何Nullable<T>都可以隱式轉換為它的T ,提供了被評估的整個表達式永遠不會導致ValueType的空賦值。 那麼,空合併運算符?? 只是三元運算符的語法糖:

v2 = v1 == null ? default(int) : v1;

...這反過來語法糖為一個if / else:

if(v1==null)
   v2 = default(int);
else
   v2 = v1;

此外,從.NET 4.0開始, Nullable<T>具有一個“GetValueOrDefault()”方法,它是一個基本上執行上面顯示的空合併的空安全getter,因此它也可以工作:

v2 = v1.GetValueOrDefault();

喜歡這個,

if(v1.HasValue)
   v2=v1.Value

如果你知道v1有一個值,你可以使用Value屬性:

v2 = v1.Value;

使用GetValueOrDefault方法將為該值分配值,否則為該類型的默認值或您指定的默認值:

v2 = v1.GetValueOrDefault(); // assigns zero if v1 has no value

v2 = v1.GetValueOrDefault(-1); // assigns -1 if v1 has no value

您可以使用HasValue屬性來檢查v1是否有值:

if (v1.HasValue) {
  v2 = v1.Value;
}

還有對GetValueOrDefault(T)方法的語言支持:

v2 = v1 ?? -1;

如果它不是空值,它會將v1值賦給v2 ,否則它會將默認值設置為零。

v2=v1??0

或以下是寫它的另一種方式。

v2 = v1.HasValue?v1:0

完全可以為int轉換可以這樣完成:

v2=(int)v1;

就我而言,最好的解決方案是使用GetValueOrDefault()方法。

v2 = v1.GetValueOrDefault();

所有你需要的是..

v2= v1.GetValueOrDefault();

根據您的使用情況,您可以使用C#7的模式匹配功能:

int? v1 = 100;
if (v1 is int v2)
{
    Console.WriteLine($"I'm not nullable anymore: {v2}");
}




nullable