[英]int.Parse not throwing an exception
我有一個包含TextBox的自定義控件。 自定義類具有3個屬性,MinValue,MaxValue和Value,定義如下:
public int Value
{
get { return int.Parse(text.Text); }
set
{
text.Text = value.ToString();
}
}
public int MaxValue { get; set; }
public int MinValue { get; set; }
當自定義類中的TextBox失去焦點時,將運行以下方法:
void text_LostFocus(object sender, EventArgs e)
{
Value = Value > MaxValue ? MaxValue : Value;
Value = Value < MinValue ? MinValue : Value;
}
如果TextBox的字符串大於2,147,483,647,則丟失焦點時文本將保持不變,並且不會引發任何異常。
為什么不引發異常,我該如何進行設置,以便它將高於Int32.MaxValue
值設置為MaxValue
,並且將低於Int32.MinValue
值Int32.MinValue
為MinValue
?
首先,C#中存在不同的整數數據類型。
例如
Int32
,范圍從-2,147,483,648
到2,147,483,647
Int64
,范圍從-9,223,372,036,854,775,808
到9,223,372,036,854,775,807
使用Int32
不可能有更大的范圍,因為它使用32位內存。 使用該類型的無符號版本會將范圍更改為僅正值,因此,如果不需要負值,則還可以查看UInt32
。
要實際增加范圍,唯一的選擇是使用Int64
數據類型。
另請參閱: https : //msdn.microsoft.com/zh-CN/en-en/library/exx3b86w.aspx
( int
是一個別名Int32
, long
為Int64
)
其次,由於您既沒有try-catch
塊,也沒有使用TryParse
因此應該有未處理的System.OverflowException
。 如果根本沒有例外,那就有點奇怪了。 您確定這不是在try-catch
塊中嗎?
無論如何,我建議使用TryParse
代替Parse
並相應地處理錯誤。
如果我遇到您的情況,並且想了解發生了什么,我將在調試器下運行該應用程序,並在LostFocus
事件處理程序中使用一個斷點。 您還可以考慮添加try / catch / throw,這可以使驗證異常確實更容易,如果可以的話,在吞下異常之前對其進行檢查:
void text_LostFocus(object sender, EventArgs e)
{
try
{
Value = Value > MaxValue ? MaxValue : Value;
Value = Value < MinValue ? MinValue : Value;
}
catch(Exception ex)
{
throw;
}
}
好的,所以我發現了問題:
紅色圓圈內的復選框未選中。 修復IDE(VS Express 2012)的安裝時可能就已經存在。 我最近安裝了VS 2012 Professional,它們使用相同的選項,因為在Professional中進行檢查也已在Express中對其進行了修復
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.