运营商' *'不能应用于' double'类型的操作数和'方法'类型

时间:2017-08-07 08:10:00

标签: c#

我正在尝试将form2中声明的文本框放在form3中。在form2上我有

public partial class Form2 : Form
{
    public static string SetvalueforTextBox1;
    public static string SetvalueforTextBox2;
}

以及

public void TextBox1_TextChanged(object sender, EventArgs e)
{
    SetvalueforTextBox1 = TextBox1.Text;
    SetvalueforTextBox2 = TextBox2.Text;
}

现在在我的form3上我想在form2

上显示用户输入值的乘法
private void label1_Click(object sender, EventArgs e)
{
    label1.Text = double.Parse(Form2.SetvalueforTextBox1) 
        * double.Parse(Form2.SetvalueforTextBox1).ToString();
}

我得到错误"运营商' *'不适用于类型' double和'方法的操作数'型

请帮帮我

3 个答案:

答案 0 :(得分:3)

你的问题在这里:

double.Parse(Form2.SetvalueforTextBox1).ToString()

首先解析字符串,然后再转换为字符串10。删除.ToString()

我想你想写:

label1.Text = (double.Parse(Form2.SetvalueforTextBox1) * double.Parse(Form2.SetvalueforTextBox1)).ToString();

在第一种情况下,你尝试乘以double和string,在第二种情况下你将乘法结果转换为字符串。

答案 1 :(得分:1)

在第

label1.Text = double.Parse(Form2.SetvalueforTextBox1) * double.Parse(Form2.SetvalueforTextBox1).ToString();

你正在做以下事情(让我们把它分解):

  1. 解析SetvalueforTextBox1
  2. 中的双精度数
  3. 解析SetvalueforTextBox1
  4. 中的双精度数
  5. 您在2的结果上致电ToString()
  6. 您尝试将第一个解析的结果与从第二个部分
  7. 得到的字符串相乘

    这会给你错误。

    你需要做的是封装乘法并得到结果als字符串,如下所示:

    label1.Text = (double.Parse(Form2.SetvalueforTextBox1) * double.Parse(Form2.SetvalueforTextBox1)).ToString();
    

    这样,乘法的结果将作为字符串返回并分配。

答案 2 :(得分:0)

似乎您在使用double.Parse之前忘记用括号括起ToString方法:

label1.Text = (double.Parse(Form2.SetvalueforTextBox1) * double.Parse(Form2.SetvalueforTextBox1)).ToString();

这是一个正确的分配顺序,因为double.Parse首先评估,然后将它们相乘& ToString方法将double值转换为label1.Text属性所需的字符串。

请注意,运算符优先级决定了执行流程:

  1. double.Parse(Form2.SetvalueforTextBox1)string值转换为第一个操作数的double

  2. double.Parse(Form2.SetvalueforTextBox1).ToString()将字符串转换为double,然后ToString将其值恢复为字符串作为第二个操作数。

  3. 运营商*尝试乘以double& string值,在此上下文中无效(操作数必须具有相同的数据类型才能执行乘法)。