Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
int32行为异常时得到错误答案,如何解决?C#_C#_Int32 - Fatal编程技术网

int32行为异常时得到错误答案,如何解决?C#

int32行为异常时得到错误答案,如何解决?C#,c#,int32,C#,Int32,我试图用这段代码得到结果。假设它可以使用我选择的任何数字,但它最终只适用于“0”。(val1,是我在其中写入数字的文本框)和(yarncombobox,ft3.garnlangd1是我获取计算所需值的地方)。我想Int32可能是错的…我应该用什么来代替呢 此外,删除所有数字时,我会收到错误消息“System.FormatException:'Indatasträngen hade ett felaktigt format.” 编辑:我确实让它工作了一些,它确实给出了正确的浮点值。但同样的问题。删

我试图用这段代码得到结果。假设它可以使用我选择的任何数字,但它最终只适用于“0”。(val1,是我在其中写入数字的文本框)和(yarncombobox,ft3.garnlangd1是我获取计算所需值的地方)。我想Int32可能是错的…我应该用什么来代替呢

此外,删除所有数字时,我会收到错误消息“System.FormatException:'Indatasträngen hade ett felaktigt format.”

编辑:我确实让它工作了一些,它确实给出了正确的浮点值。但同样的问题。删除同一框中的所有数字时,应用程序崩溃

            float val1 = Convert.ToSingle(YarnWeightTextbox.Text);
        Class2 ft3 = YarnComboBox.SelectedItem as Class2;
        float val2 = val1 / 50 * ft3.garnlangd1;
        {
            YarnLengthTextbox.Text = Convert.ToString(val2);

以下是几点建议:

private void YarnWeightTextbox_TextChanged(object sender, EventArgs e)
{
        //Check for the empty string. If it is empty then just return
        string weight = YarnWeightTextbox.Text;
        if(String.IsNullOrEmpty(weight))
        {
            return;
        }

        //Otherwise convert to integer or to a float as you have
        Int32 val1 = Convert.ToInt32(YarnWeightTextbox.Text);

        Class2 ft3 = YarnComboBox.SelectedItem as Class2;
        //When casting using the `as` operator. I make a point of checking for null just
        //in case for some reason it isn't an instance of the class I expect.
        if(ft3 != null)
        {
            //Finally change the 50 to 50.0. This tells the compiler to divide using a float
            //rather than an integer. Dividing 2 integers results in the truncation of the fractional part
            YarnLengthTextbox.Text = Convert.ToString((val1 / 50.0) * ft3.garnlangd1);
        }
}
最重要的部分是:

  • 检查是否有空字符串
  • 使用浮点除法而不是整数除法作为整数除法进行除法将删除结果的小数部分,这可能是您看到的一些奇怪结果的原因

  • 以下是几点建议:

    private void YarnWeightTextbox_TextChanged(object sender, EventArgs e)
    {
            //Check for the empty string. If it is empty then just return
            string weight = YarnWeightTextbox.Text;
            if(String.IsNullOrEmpty(weight))
            {
                return;
            }
    
            //Otherwise convert to integer or to a float as you have
            Int32 val1 = Convert.ToInt32(YarnWeightTextbox.Text);
    
            Class2 ft3 = YarnComboBox.SelectedItem as Class2;
            //When casting using the `as` operator. I make a point of checking for null just
            //in case for some reason it isn't an instance of the class I expect.
            if(ft3 != null)
            {
                //Finally change the 50 to 50.0. This tells the compiler to divide using a float
                //rather than an integer. Dividing 2 integers results in the truncation of the fractional part
                YarnLengthTextbox.Text = Convert.ToString((val1 / 50.0) * ft3.garnlangd1);
            }
    }
    
    最重要的部分是:

  • 检查是否有空字符串
  • 使用浮点除法而不是整数除法作为整数除法进行除法将删除结果的小数部分,这可能是您看到的一些奇怪结果的原因

  • 正如Shane Haw在评论中提到的,您将获得
    格式异常
    ,因为
    文本更改
    事件会在文本更改时触发

    如果
    YarnWeightTextBox.Text
    中的值为
    “5”
    ,并且您删除了
    “5”
    ,则会触发
    TextChanged
    事件。这意味着您正在将一个空字符串
    传递给
    Convert.ToSingle
    。空字符串不会转换为
    浮点
    ,因此您会得到
    格式异常
    。如果在
    文本框
    中放入除数字以外的任何内容,也会得到相同的结果

    更好的选择是检查
    YarnWeightTextBox.Text中的值是否解析为
    float
    ,而不是使用
    Convert.ToFloat

    private void YarnWeightTextBox\u text已更改(对象发送方,事件参数e)
    {
    浮动值1=0.0F;
    if(!float.TryParse(YarnWeightTextBox.Text,out val1))
    {
    //YarnWeightTextBox.Text中的值未解析为浮点值。您可以
    //在此处执行某些操作,以向用户表明他们没有提供正确的
    //值,或者只是返回。
    返回;
    }
    //计算纱线长度并将其放入YarnLengthTextBox。像现在一样输入文本。
    }
    

    或者,如果这是
    Windows窗体
    ,您可以查看该控件,该控件将防止用户输入无效值。

    正如Shane Haw在评论中提到的,您将获得
    FormatException
    ,因为
    TextChanged
    事件在文本更改时触发

    如果
    YarnWeightTextBox.Text
    中的值为
    “5”
    ,并且您删除了
    “5”
    ,则会触发
    TextChanged
    事件。这意味着您正在将一个空字符串
    传递给
    Convert.ToSingle
    。空字符串不会转换为
    浮点
    ,因此您会得到
    格式异常
    。如果在
    文本框
    中放入除数字以外的任何内容,也会得到相同的结果

    更好的选择是检查
    YarnWeightTextBox.Text中的值是否解析为
    float
    ,而不是使用
    Convert.ToFloat

    private void YarnWeightTextBox\u text已更改(对象发送方,事件参数e)
    {
    浮动值1=0.0F;
    if(!float.TryParse(YarnWeightTextBox.Text,out val1))
    {
    //YarnWeightTextBox.Text中的值未解析为浮点值。您可以
    //在此处执行某些操作,以向用户表明他们没有提供正确的
    //值,或者只是返回。
    返回;
    }
    //计算纱线长度并将其放入YarnLengthTextBox。像现在一样输入文本。
    }
    

    或者,如果这是
    Windows窗体
    ,您可以查看防止用户输入无效值的控件。

    之所以
    FormatException
    ,是因为每次更改文本时,包括删除所有文本时,都会触发
    TextChanged
    事件
    Convert.ToInt32
    然后尝试将空字符串转换为整数,然后抛出异常。当你说它对0以外的任何东西都不起作用时,你是什么意思?会发生什么?是否引发异常?或者只是文本框中的输出错误?对于int32,如果我写“50”它的“170”,它应该是,但当我将它改为“55”它仍然是“170”。如果我写“555”,我会得到“1700”,但是…我尝试了“float val1=Convert.ToSingle(YarnWeightTextbox.Text);”,这确实做了正确的计算。但都一样。当我删除所有内容时,我会收到错误消息。
    FormatException
    是因为每次更改文本时,包括删除所有文本时,都会触发
    TextChanged
    事件
    Convert.ToInt32
    然后尝试将空字符串转换为整数,然后抛出异常。当你说它对0以外的任何东西都不起作用时,你是什么意思?会发生什么?是否引发异常?或者只是文本框中的输出错误?对于int32,如果我写“50”它的“170”,它应该是,但当我将它改为“55”它仍然是“170”。如果我写“555”,我会得到“1700”,但是…我尝试了“float val1=Convert.ToSingle(YarnWeightTextbox.Text);”,这确实做了正确的计算。但都一样。当我删除所有内容时,我会收到错误消息。哦,我现在确实明白它是如何工作的(很好的解释)。我确实试着写了,但我得到了下一个错误,“返回”无效的压缩项。我也尝试过();及;和:返回后相同,错误相同
    private void YarnWeightTextbox_TextChanged(object sender, EventArgs e)
    {
        if (sender is TextBox textBox)
        {
            if (float.TryParse(textBox.Text, out var yarnWeight) && YarnComboBox.SelectedItem is Class2 class2)
            {
                var yarnLength = (yarnWeight / 50.0) * class2.garnlangd1;
    
                YarnLengthTextbox.Text = yarnLength.ToString();
            }
            else
            {
                YarnLengthTextbox.Text = string.Empty;
            }
        }
    }