我有下面的代碼 -手柄零點正確
int lat = System.Convert.ToInt16(latTextBox1.Text);
這是一個變化的事件發生。
但是我的代碼是打破在這一行話說 -
Input string was not in a correct format.
其中latTextBox1.Text
= ""
這是一個空字符串。 我認爲這是打破,因爲它不能將空字符串轉換爲空值。
如何修改我的代碼以解釋空值?
我有下面的代碼 -手柄零點正確
int lat = System.Convert.ToInt16(latTextBox1.Text);
這是一個變化的事件發生。
但是我的代碼是打破在這一行話說 -
Input string was not in a correct format.
其中latTextBox1.Text
= ""
這是一個空字符串。 我認爲這是打破,因爲它不能將空字符串轉換爲空值。
如何修改我的代碼以解釋空值?
好的,根據你的評論你可以使用:
int? lat = string.IsNullOrEmpty(latTextBox1.Text)
? (int?)null : Convert.ToInt32(latTextBox1.Text);
int?
是一個可爲空的int。
在嘗試將其轉換爲整數之前,您應該先檢查當前值是否爲空,請查看以下片段 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和經度值應存放在一個雙數據類型,以保持精度。
由於'lat'在'塊,因此不能在塊外使用。另外,它會在'if'塊中拋出一個編譯器錯誤,因爲'lat'被聲明瞭兩次。 –
編輯後解決的問題。 –
'IsNullOrEmtpty'不是一個將'string'轉換爲'int'的好方法。它不保證字符串是可轉換的。 –
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
}
_did不包含int_也匹配「abc」,這可能不合意。 –
你必須檢查的字符串設定:
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
}
可能是一個更好的方法,因爲它與非數字輸入對應。
你可以用下面的方法:
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
在第二種情況下,如果我給一個非整數,它會起作用嗎? (如一些文字)。我們得到一個「輸入字符串格式不正確」的錯誤 – Hari
好,Convert.ToInt16
並不意味着向一個空字符串轉換爲空值...的確不能,因爲返回類型是一個非空的Int16
(又名short
)。
我懷疑你真正想要的東西更像:
int lat;
if (int.TryParse(latTextBox1.Text, out lat))
{
// Use lat
}
else
{
// Invalid or empty input. Handle appropriately.
}
如果你想以不同方式處理空字符串爲無效輸入,你需要做的是明確的 - 儘管你也應該考慮是否「只是空白「相當於」空「或」無效「。
怎麼樣簡單:
int? lat = null;
int dummyLat;
if (Int32.TryParse(latTextBox1.Text, out dummyLat)
lat = dummyLat;
在一個側面說明:
我從未字符串轉換在TextChanged
事件永遠!爲什麼?因爲它會在每次按鍵時觸發一個事件!使用其他觸發器啓動轉換(例如按鈕)。
int i = 0;
if (!Int32.TryParse(latTextBox1.Text, out i)) {
i = 0; // or default value;
}
如果你打算讓你的局部變量賦值另一個函數的值(比如在這種情況下用'Int32.TryParse'和它的'out'參數),那麼你不應該用初始值聲明它,因爲初始值會被丟棄。它還會強制你的代碼在你意外使用之前確保它被賦值(通過'out')。 –
一個內膽:
int lat = System.Convert.ToInt16(latTextBox1.Text.Length == 0 ? 0 : latTextBox1.Text);
基本上就像聚結,如果latTextBox1.Text不具有價值,它從latTextBox1.Text
我認爲我們的答案應該儘可能描述,所以澄清比縮短更好:D –
這不會在作者想要的結果 –
設置爲零 否則其值爲你這是什麼如果'latTextBox1.Text'爲空,是否需要'lat'?你也不是在調用'Convert.ToIn16'並把它分配給一個'int' - 你應該使用'Convert.ToInt32'。 –
在數據庫中它允許爲空,所以null將是默認值而不是零,因爲lat實際上代表緯度,而「0」是有效的緯度值,所以是的,它必須爲空。 – Ebikeneser
您可以使用客戶端角色消除客戶端問題(當然,您也需要服務器端驗證,因爲客戶端驗證可以忽略,但這需要一些技巧和很少發生,反正使用'Int32.TryParse()'來轉換字符串到int安全) – sll