为啥有时我可以分配双打而没有价值?
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
的值,同时将&&
替换为&
。
【讨论】:
以上是关于为啥有时我可以分配双打而没有价值?的主要内容,如果未能解决你的问题,请参考以下文章