2013-02-04 48 views
1

我有下面的代碼 -手柄零點正確

int lat = System.Convert.ToInt16(latTextBox1.Text); 

這是一個變化的事件發生。

但是我的代碼是打破在這一行話說 -

Input string was not in a correct format. 

其中latTextBox1.Text = ""這是一個空字符串。 我認爲這是打破,因爲它不能將空字符串轉換爲空值。

如何修改我的代碼以解釋空值?

+3

設置爲零 否則其值爲你這是什麼如果'latTextBox1.Text'爲空,是否需要'lat'?你也不是在調用'Convert.ToIn16'並把它分配給一個'int' - 你應該使用'Convert.ToInt32'。 –

+0

在數據庫中它允許爲空,所以null將是默認值而不是零,因爲lat實際上代表緯度,而「0」是有效的緯度值,所以是的,它必須爲空。 – Ebikeneser

+0

您可以使用客戶端角色消除客戶端問題(當然,您也需要服務器端驗證,因爲客戶端驗證可以忽略,但這需要一些技巧和很少發生,反正使用'Int32.TryParse()'來轉換字符串到int安全) – sll

回答

3

好的,根據你的評論你可以使用:

int? lat = string.IsNullOrEmpty(latTextBox1.Text) 
       ? (int?)null : Convert.ToInt32(latTextBox1.Text); 

int?是一個可爲空的int。

1

在嘗試將其轉換爲整數之前,您應該先檢查當前值是否爲空,請查看以下片段 int lat = 0;

If(! string.IsNullorEmpty(latTextBox1.Text)) 
    { 
    lat = System.Convert.ToInt32(latTextBox1.Text); 
    } 
// use your lat variable here 

更新:

從上面的評論,lat可以保持NULL值,所以你必須使它可爲空詮釋,以使其保持NULL值

考慮這個更新的代碼片段 int? lat = 0;

If(! string.IsNullorEmpty(latTextBox1.Text)) 
    { 
    lat.value = System.Convert.ToInt32(latTextBox1.Text); 
    } 
// use your lat variable here by accessing the lat.value property 

注:latiture和經度值應存放在一個數據類型,以保持精度。

+2

由於'lat'在'塊,因此不能在塊外使用。另外,它會在'if'塊中拋出一個編譯器錯誤,因爲'lat'被聲明瞭兩次。 –

+1

編輯後解決的問題。 –

+0

'IsNullOrEmtpty'不是一個將'string'轉換爲'int'的好方法。它不保證字符串是可轉換的。 –

0
int lat = 0; 

if (Int32.TryParse(laTextBox1.Text, out lat)) 
{ 
    //success, textbox contained an int, now lat has the value of that int 
} 
else 
{ 
    //failure, textbox did not contain an int 
} 
+0

_did不包含int_也匹配「abc」,這可能不合意。 –

0

你必須檢查的字符串設定:

int lat = 0; 
if (string.IsNullOrEmpty(latTextBox1.Text) 
{ 
    // Your null case here 
} 
else 
{ 
    lat = System.Convert.ToInt16(latTextBox1.Text); 
} 

雖然:

int lat = 0; 
if (!Int32.TryParse(latTextBox1.Text, out lat) 
{ 
    // Error handling here 
} 

可能是一個更好的方法,因爲它與非數字輸入對應。

2

你可以用下面的方法:

Int16.TryParse

或者你可以檢查字符串不執行邏輯之前null或空:

if (!string.IsNullOrEmpty(latTextBox1.Text)) { 
    lat = System.Convert.ToInt16(latTextBox1.Text); 
} 

http://msdn.microsoft.com/en-us/library/system.int16.tryparse.aspx

+0

在第二種情況下,如果我給一個非整數,它會起作用嗎? (如一些文字)。我們得到一個「輸入字符串格式不正確」的錯誤 – Hari

3

好,Convert.ToInt16並不意味着一個空字符串轉換爲空值...的確不能,因爲返回類型是一個非空的Int16(又名short)。

我懷疑你真正想要的東西更像:

int lat; 
if (int.TryParse(latTextBox1.Text, out lat)) 
{ 
    // Use lat 
} 
else 
{ 
    // Invalid or empty input. Handle appropriately. 
} 

如果你想以不同方式處理空字符串爲無效輸入,你需要做的是明確的 - 儘管你也應該考慮是否「只是空白「相當於」空「或」無效「。

3

怎麼樣簡單:

int? lat = null; 
int dummyLat; 
if (Int32.TryParse(latTextBox1.Text, out dummyLat) 
    lat = dummyLat; 

在一個側面說明:
從未字符串轉換在TextChanged事件永遠!爲什麼?因爲它會在每次按鍵時觸發一個事件!使用其他觸發器啓動轉換(例如按鈕)。

0
int i = 0; 

if (!Int32.TryParse(latTextBox1.Text, out i)) { 

    i = 0; // or default value; 
} 
+1

如果你打算讓你的局部變量賦值另一個函數的值(比如在這種情況下用'Int32.TryParse'和它的'out'參數),那麼你不應該用初始值聲明它,因爲初始值會被丟棄。它還會強制你的代碼在你意外使用之前確保它被賦值(通過'out')。 –

-1

一個內膽:

int lat = System.Convert.ToInt16(latTextBox1.Text.Length == 0 ? 0 : latTextBox1.Text); 

基本上就像聚結,如果latTextBox1.Text不具有價值,它從latTextBox1.Text

+0

我認爲我們的答案應該儘可能描述,所以澄清比縮短更好:D –

+0

這不會在作者想要的結果 –