簡體   English   中英

int.Parse不引發異常

[英]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.MinValueInt32.MinValueMinValue

首先,C#中存在不同的整數數據類型。

例如

Int32 ,范圍從-2,147,483,6482,147,483,647

Int64 ,范圍從-9,223,372,036,854,775,8089,223,372,036,854,775,807

使用Int32不可能有更大的范圍,因為它使用32位內存。 使用該類型的無符號版本會將范圍更改為僅正值,因此,如果不需要負值,則還可以查看UInt32
要實際增加范圍,唯一的選擇是使用Int64數據類型。

另請參閱: https : //msdn.microsoft.com/zh-CN/en-en/library/exx3b86w.aspx

int是一個別名Int32longInt64

其次,由於您既沒有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM