为啥有时我可以分配双打而没有价值?

Posted

技术标签:

【中文标题】为啥有时我可以分配双打而没有价值?【英文标题】:Why can I assign doubles sometimes without value?为什么有时我可以分配双打而没有价值? 【发布时间】:2022-01-06 22:42:53 【问题描述】:

我写了一个小 WF 程序来计算一些电容器和欧姆定律。我现在想稍微整理一下。我遇到了一个问题,我使用了 2 个双精度值,它们都被赋值为 0。我可以从电压双精度值中删除该值。但不是现在的。我不知道为什么。有什么我想念的吗?错误消息是 CS0165 Use of unassigned local variable 'current',并出现在调用 CalcResistance 方法的行中

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Kondensator_Ohmsches_Gesetz_Calc

    public partial class Form1 : Form
    
        public Form1()
        
            InitializeComponent();
        

        private void Form1_Load(object sender, EventArgs e)
               
          
        

        private void calcResistance_Click(object sender, EventArgs e)
        
            double voltage;
            double current;
            bool ok = double.TryParse(textBox1.Text, out voltage) && double.TryParse(textBox2.Text, out current);
            if (ok)
            
                textBox3.Text = Formulacollection.CalcResistance(voltage, current);
            
            else
            
                textBox3.Text = "Error Format not found";
            
            textBox4.Text = Formulacollection.ConvertMicro(textBox3.Text);
            textBox5.Text = Formulacollection.ConvertMilli(textBox3.Text);
            textBox6.Text = Formulacollection.ConvertKilo(textBox3.Text);
            textBox7.Text = Formulacollection.ConvertMega(textBox3.Text);

        

Formulacollection 类的工作方式如下:

using System;
using System.Collections.Generic;
using System.Text;
using static System.Math;
using System.Numerics;
using System.Globalization;

namespace Kondensator_Ohmsches_Gesetz_Calc

    public static class Formulacollection
    
        public static string CalcResistance(double voltage, double current)
        
            var resistance = voltage / current;

            return resistance.ToString();
        

【问题讨论】:

编译器似乎无法正确处理您将两个TryParse 的结果存储在一个变量中。不知道这是错误还是选择。奇怪的是,如果你内联 ok-变量,它也可以工作 - 如果你将检查分成两个布尔值并在你的 if 条件中比较 them 上的调用 &&,它也可以工作 这看起来很奇怪。感谢您的解决方法/修复@FranzGleichmann 为什么你有string CalcResistance(double voltage, double current)而不是double CalcResistance(double voltage, double current) @Enigmativity 我将此字符串存储在 textbox3.Text 中,它只接受一个字符串 @Bododerelf - 然后在分配时执行.ToString()。您正在混合计算并以其他方式显示,这通常很糟糕。 【参考方案1】:

当您使用 && 运算符时,不会总是计算第二部分。尝试使用 & 代替它,或者在声明时将默认值设置为 current。

【讨论】:

虽然这似乎也能正常工作,但奇怪的是,在 if 条件中直接调用带有 && 的原始表达式时编译器没有任何问题 但是为什么我调用CalcResistance方法时会调出参数呢?它不应该在 try 解析中强调我当前的调用吗?【参考方案2】:

首先 CS0165 是使用未初始化变量时发生的错误。 但是这里错误发生在正确初始化的变量current 上。关于错误的简要说明是here

所以尝试在类中全局初始化变量,然后尝试编译。

那么有概率of ok 变量同时持有两个TryParse 的值,同时将&& 替换为&

【讨论】:

以上是关于为啥有时我可以分配双打而没有价值?的主要内容,如果未能解决你的问题,请参考以下文章

在计算光流时,为啥帧没有价值?

为啥我的数字类型的表单输入没有得到任何价值?

为啥以这种方式使用 Alamofire 时没有发现任何价值?

PHP,单选按钮返回,而不是价值

D3:为啥“获取”操作会破坏价值

标签没有获得价值