int.Parse不抛出异常

时间:2015-03-21 11:46:16

标签: c# winforms 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.MaxValueMaxValue,值低于Int32.MinValue到{{1} }?

3 个答案:

答案 0 :(得分:1)

首先,C#中有不同的整数数据类型。

e.g。

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/en-US/en-en/library/exx3b86w.aspx

intInt32的别名,long的{​​{1}}

其次,由于您既没有Int64块也没有使用try-catch,因此应该有一个未处理的TryParse。如果没有任何例外,这有点奇怪。你确定,那不在System.OverflowException区块内吗?

无论如何,我建议您使用try-catch代替TryParse并相应地处理错误。

答案 1 :(得分:0)

如果我遇到你的情况,并想了解发生了什么,我会在调试器下运行应用程序,在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;
    }
}

答案 2 :(得分:-1)

好的,我发现了这个问题:

enter image description here

红色圆圈内的复选框取消选中。可能是我修复了我的IDE安装(VS Express 2012)。我最近安装了VS 2012 Professional,他们使用相同的选项,因为在Professional中检查它也在Express

中修复了它