2015-06-26 58 views
0
var pin = parseInt(form.mac.value.slice(-6), 16) % 10000000; 

我是JS轉換爲C#這樣System.OverflowException在JS轉換爲C#

var pin = Convert.ToInt16(Networks[NetworkIndex, 0].Substring(Networks[NetworkIndex, 0].Length - 6)) % 10000000; 

,然後我得到這個錯誤

類型的未處理的異常「系統.OverflowException'發生在 mscorlib.dll附加信息:對於Int16,值太大或太小 。

+1

什麼是'網絡[NetworkIndex,0] .Substring的值(網絡[NetworkIndex,0]。長度 - 6))'是什麼呢? –

+0

該值是來自mac地址14:cc:20:30:76:50 - > 307650的6位數字 –

回答

1

該值對於Int16來說太大。嘗試使用Convert.ToInt32

var pin = Convert.ToInt32(Networks[NetworkIndex, 0].Substring(Networks[NetworkIndex, 0].Length - 6)) % 10000000; 
1

使用Convert.ToInt32而不是Convert.ToInt16。該值太大而不適合Int16

Int16值類型表示值爲範圍從負數32768到正數32767的有符號整數。 30765032767大,因此您應該使用更大的類型來存儲值。Int16使用2個字節的內存來存儲整數值,Int32將使用4個字節並且可以設法存儲更大範圍的整數。 Int32是一個不可變的值類型,表示帶符號整數值的範圍從2,147,483,648到正數2,147,483,647。

試試這個

var pin = Convert.ToInt32(Networks[NetworkIndex, 0].Substring(Networks[NetworkIndex, 0].Length - 6)) % 10000000; 
1

您還可以使用int.TryParse("your number", out int)這不會引發任何異常(如果你會得到字符串空)。如果它被解析,那麼它意味着該值是正確的,或者你可以明確地拋出你的代碼中的異常。

看一看。

Int.TryParse