首页 > 解决方案 > 为什么我会收到“未分配的局部变量”错误?

问题描述

在 if 语句下,等式中粗体和斜体的“CATickets”给了我一个未分配的局部变量错误。我是编码新手,不知道这意味着什么或如何解决它。我曾尝试查找此错误,但再次是编码新手,我不明白这是什么意思或如何解决它。其他票证变量没有错误,所以我不确定为什么这个有一个。

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

namespace WindowsFormsApp3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btn_Calculate_Click(object sender, EventArgs e)
        {
            double CATickets;
            double CBTickets;
            double CCTickets;
            double totalRev;

            if (txt_CASold.Text != "" && txt_CBSold.Text !=
                                     "" && txt_CCSold.Text != "")
                CATickets = double.Parse(txt_CASold.Text);
                CBTickets = double.Parse(txt_CBSold.Text);
                CCTickets = double.Parse(txt_CCSold.Text);

                CATickets = ***CATickets*** * 15.0;
                CBTickets = CBTickets * 12.0;
                CCTickets = CCTickets * 9.0;
                totalRev = CATickets + CBTickets + CCTickets;

                txt_CARev.Text = CATickets.ToString("C");
                txt_CBRev.Text = CBTickets.ToString("C");
                txt_CCRev.Text = CCTickets.ToString("C");
                txt_TotalRev.Text = totalRev.ToString("C");

        }

        private void btn_Clear_Click(object sender, EventArgs e)
        {
            txt_CASold.Text = "";
            txt_CBSold.Text = "";
            txt_CCSold.Text = "";
            txt_CARev.Text = "";
            txt_CBRev.Text = "";
            txt_CCRev.Text = "";
            txt_TotalRev.Text = "";
        }

        private void btn_Exit_Click(object sender, EventArgs e)
        {
            this.Close();
}

标签: c#

解决方案


首先,不要拆分声明和初始化。也就是不要声明没有值的变量,只为以后赋值。

其次,编译器告诉您您正在使用一个可能尚未分配的变量。那是因为您的if语句仅适用于紧随其后的行,而不适用于其余行,因为您忘记了以下代码周围的花括号。

重写你的代码来解决这个问题:

if (txt_CASold.Text == "" || txt_CBSold.Text == "" || txt_CCSold.Text == "") {
    return;
}

double CATickets = double.Parse(txt_CASold.Text) * 15.0;
double CBTickets = double.Parse(txt_CBSold.Text) * 12.0;
double CCTickets = double.Parse(txt_CCSold.Text) * 9.0;
double totalRev = CATickets + CBTickets + CCTickets;

txt_CARev.Text = CATickets.ToString("C");
txt_CBRev.Text = CBTickets.ToString("C");
txt_CCRev.Text = CCTickets.ToString("C");   
txt_TotalRev.Text = totalRev.ToString("C");

您还应该删除代码中的魔术常量:What's15.0等?介绍解释这些值的命名常量。


推荐阅读