Vb.net 为变量分配数学运算符,但不带IF-System.MissingMemberException

Vb.net 为变量分配数学运算符,但不带IF-System.MissingMemberException,vb.net,Vb.net,我试图通过字符串变量(cal\u operation)发送操作符号,但出现错误 注: label1将保存结果 text1保存两个数字中的一个,这两个数字将对其进行计算 text2保留两个数字中的第二个数字,这两个数字将构成 算计 cal_操作字符串保留操作符号(-or+或/或-) 代码是: Dim cal_Operation As String Public newops = New Dictionary(Of String, Func(Of Double, Double, Double))

我试图通过字符串变量(
cal\u operation
)发送操作符号,但出现错误

注:

  • label1将保存结果
  • text1保存两个数字中的一个,这两个数字将对其进行计算
  • text2保留两个数字中的第二个数字,这两个数字将构成 算计
  • cal_操作字符串保留操作符号(-or+或/或-)
代码是:

Dim cal_Operation As String
Public newops = New Dictionary(Of String, Func(Of Double, Double, Double))() From {
        {"+", Function(x, y) x + y},
        {"-", Function(x, y) x - y},
        {"*", Function(x, y) x * y},
        {"/", Function(x, y) x / y}
我有单选按钮将操作分配给字符串变量
在按钮中插入此代码

RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
   cal_Operation = "+" 
   Dim op1 = newops(cal_Operation)
   Label1.Text = CStr(op1(CDbl(TextBox1.Text), CDbl(TextBox2.Text)))
End Sub
但是我得到了这个错误

“System.MissingMemberException”类型的未处理异常 在Microsoft.VisualBasic.dll中发生其他信息:否 找到“Func(Double,Double,Double)”类型的默认成员


原因和解决方案是什么?

您需要更改
newops
字典的声明,并明确其类型

Public newops as Dictionary(Of String, Func(Of Double, Double, Double)) = 
       New Dictionary(Of String, Func(Of Double, Double, Double))() From {
{"+", Function(x, y) x + y},
{"-", Function(x, y) x - y},
{"*", Function(x, y) x * y},
{"/", Function(x, y) x / y}}

你能展示一下你是如何填充
校准操作的吗?如果您将其值硬编码为字典中的一个运算符,它会工作吗?我有单选按钮,其中的私有子RadioButton1_CheckedChanged(发送者作为对象,e作为事件参数)处理RadioButton1.CheckedChanged cal_Operation=“+”End Sub+1是依赖类型推断危险的一个很好的示例(和选项严格关闭)。类型推断仅在过程级别有效,而不是您尝试的类。由于
newops
将作为对象键入,因此
RadioButton1\u CheckedChanged
中的
op1
也将作为对象键入,因此您收到延迟绑定错误消息。