C# 开关箱语句

C# 开关箱语句,c#,C#,我试图在C#中创建一个应用程序,将文本框中的数字转换为标签控件中的罗马数字,并需要使用case语句。但是,我的一个变量Roman得到错误消息:使用未分配的局部变量“Roman” 这是我的密码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Tex

我试图在C#中创建一个应用程序,将文本框中的数字转换为标签控件中的罗马数字,并需要使用case语句。但是,我的一个变量Roman得到错误消息:使用未分配的局部变量“Roman”

这是我的密码:

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

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

    private void btnCalc_Click(object sender, EventArgs e)
    {

        int Number=int.Parse(txtNum.Text); // To hold Number
        string Roman; // To hold Roman Numeral 

        if (Number>=1 && Number <=10)
        {
            switch (Roman)
            {
                case "Number==1":
                lblRoman.Text = "I";
                break;
                case "Number==2":
                lblRoman.Text = "II";
                break;
                case "Number==3":
                lblRoman.Text = "III";
                break;
                case "Number==4":
                lblRoman.Text = "IV";
                break;
                case "Number==5":
                lblRoman.Text = "V";
                break;
                case "Number==6":
                lblRoman.Text = "VI";
                break;
                case "Number==7":
                lblRoman.Text = "VII";
                break;
                case "Number==8":
                lblRoman.Text = "VIII";
                break;
                case "Number==9":
                lblRoman.Text = "IX";
                break;
                case "Number==10":
                lblRoman.Text = "X";
                break;
            }
        }
        else
        {
            MessageBox.Show("Error: Invalid Input");
        }

    }

    private void btnExit_Click(object sender, EventArgs e)
    {
        // Close the form.
        this.Close();
    }

    private void btnClear_Click(object sender, EventArgs e)
    {
        txtNum.Text = "";
        lblRoman.Text = "";
    }
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
名称空间罗马数字转换器
{
公共部分类Form1:Form
{   
公共表格1()
{
初始化组件();
}
私有无效btnCalc_单击(对象发送方,事件参数e)
{
int Number=int.Parse(txtNum.Text);//保存数字
字符串罗马;//用于保存罗马数字

如果(Number>=1&&Number您的结构有点不协调

private void btnCalc_Click(object sender, EventArgs e)
{

    var Number = int.Parse(txtNum.Text); // To hold Number

    switch (Number)
    {
            case 1:
              lblRoman.Text = "I";
              break;
            case 2:
              lblRoman.Text = "II";
              break;
            case 3:
              lblRoman.Text = "III";
              break;
            case 4:
              lblRoman.Text = "IV";
              break;
            case 5:
              lblRoman.Text = "V";
              break;
            case 6:
              lblRoman.Text = "VI";
              break;
            case 7:
              lblRoman.Text = "VII";
              break;
            case 8:
              lblRoman.Text = "VIII";
              break;
            case 9:
              lblRoman.Text = "IX";
              break;
            case 10:
              lblRoman.Text = "X";
              break;
            default:
              MessageBox.Show("Error: Invalid Input");
              break;
    }

}
您使用的是
lblRoman
来保存结果,因此不需要使用
Roman
变量。此外,由于您正在询问
开关中所有可能的有效数字,您只需使用
默认值来替换
if
/
else
结构


我假设你这样做是作为一个学术练习。尽管如此,如果我不指出你的结构有点不对劲,那就太失职了

private void btnCalc_Click(object sender, EventArgs e)
{

    var Number = int.Parse(txtNum.Text); // To hold Number

    switch (Number)
    {
            case 1:
              lblRoman.Text = "I";
              break;
            case 2:
              lblRoman.Text = "II";
              break;
            case 3:
              lblRoman.Text = "III";
              break;
            case 4:
              lblRoman.Text = "IV";
              break;
            case 5:
              lblRoman.Text = "V";
              break;
            case 6:
              lblRoman.Text = "VI";
              break;
            case 7:
              lblRoman.Text = "VII";
              break;
            case 8:
              lblRoman.Text = "VIII";
              break;
            case 9:
              lblRoman.Text = "IX";
              break;
            case 10:
              lblRoman.Text = "X";
              break;
            default:
              MessageBox.Show("Error: Invalid Input");
              break;
    }

}
您使用的是
lblRoman
来保存结果,因此不需要使用
Roman
变量。此外,由于您正在询问
开关中所有可能的有效数字,您只需使用
默认值来替换
if
/
else
结构

我假设你是在做学术练习。尽管如此,如果我不指给你看,那就太失职了

当你的数字值像
1
那么罗马数字就是
I

private void btnCalc_Click(object sender, EventArgs e)
{
        int Number = int.Parse(txtNum.Text); // To hold Number
        string Roman; // To hold Roman Numeral

        if (Number >= 1 && Number <= 10)
        {
            switch (Number)
            {
                case 1:
                    lblRoman.Text = "I";
                    break;

                case 2:
                    lblRoman.Text = "II";
                    break;

                case 3:
                    lblRoman.Text = "III";
                    break;

                case 4:
                    lblRoman.Text = "IV";
                    break;

                case 5:
                    lblRoman.Text = "V";
                    break;

                case 6:
                    lblRoman.Text = "VI";
                    break;

                case 7:
                    lblRoman.Text = "VII";
                    break;

                case 8:
                    lblRoman.Text = "VIII";
                    break;

                case 9:
                    lblRoman.Text = "IX";
                    break;

                case 10:
                    lblRoman.Text = "X";
                    break;
            }
        }
        else
        {
            MessageBox.Show("Error: Invalid Input");
        }
}
private void btnCalc\u单击(对象发送者,事件参数e)
{
int Number=int.Parse(txtNum.Text);//保存数字
字符串罗马;//用于保存罗马数字
如果(Number>=1&&Number试试这个

当你的数字值像
1
那么罗马数字就是
I

private void btnCalc_Click(object sender, EventArgs e)
{
        int Number = int.Parse(txtNum.Text); // To hold Number
        string Roman; // To hold Roman Numeral

        if (Number >= 1 && Number <= 10)
        {
            switch (Number)
            {
                case 1:
                    lblRoman.Text = "I";
                    break;

                case 2:
                    lblRoman.Text = "II";
                    break;

                case 3:
                    lblRoman.Text = "III";
                    break;

                case 4:
                    lblRoman.Text = "IV";
                    break;

                case 5:
                    lblRoman.Text = "V";
                    break;

                case 6:
                    lblRoman.Text = "VI";
                    break;

                case 7:
                    lblRoman.Text = "VII";
                    break;

                case 8:
                    lblRoman.Text = "VIII";
                    break;

                case 9:
                    lblRoman.Text = "IX";
                    break;

                case 10:
                    lblRoman.Text = "X";
                    break;
            }
        }
        else
        {
            MessageBox.Show("Error: Invalid Input");
        }
}
private void btnCalc\u单击(对象发送者,事件参数e)
{
int Number=int.Parse(txtNum.Text);//保存数字
字符串罗马;//用于保存罗马数字

如果(Number>=1&&Number这是因为罗马变量实际上是未赋值的。您应该在输入语句之前赋值这是因为罗马变量实际上是未赋值的。您应该在输入语句之前赋值,而不是
开关
,您可以用
Linq
做其他更好的方法。

>
int Number=int.Parse(txtNum.Text);
var romanList = new List<string> {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"};
if (Number >= 1 && Number <= 10)
lblRoman.Text = romanList.Select((r, i) => new { Roman = r, Index = i+1}).FirstOrDefault(x=> x.Index == Number).Roman;
int Number=int.Parse(txtNum.Text);
var romanList=新列表{“I”、“II”、“III”、“IV”、“V”、“VI”、“VII”、“VIII”、“IX”、“X”};
if(Number>=1&&Number new{Roman=r,Index=i+1}).FirstOrDefault(x=>x.Index==Number).Roman;

您可以使用
Linq
执行其他操作,而不是使用
开关,这样做更好

int Number=int.Parse(txtNum.Text);
var romanList = new List<string> {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"};
if (Number >= 1 && Number <= 10)
lblRoman.Text = romanList.Select((r, i) => new { Roman = r, Index = i+1}).FirstOrDefault(x=> x.Index == Number).Roman;
int Number=int.Parse(txtNum.Text);
var romanList=新列表{“I”、“II”、“III”、“IV”、“V”、“VI”、“VII”、“VIII”、“IX”、“X”};
if(Number>=1&&Number new{Roman=r,Index=i+1}).FirstOrDefault(x=>x.Index==Number).Roman;

您可以用这种方式替换switch语句。当然,在使用它之前,您需要分配一个变量

public string GetNum(string val)
{
    string res = ""; // Assign it an empty string. 
    var numToRom = new Dictionary<string, string>
                       {
                           {"1","I"},
                           {"2","II"}
                           //so on
                       };

        numToRom.TryGetValue(val, out res);
        return res;
}
公共字符串GetNum(字符串val)
{
string res=”“;//为其分配一个空字符串。
var numToRom=新字典
{
{“1”,“I”},
{“2”,“II”}
//诸如此类
};
numToRom.TryGetValue(val,out res);
返回res;
}

您可以用这种方式替换switch语句。当然,在使用它之前,您需要分配一个变量

public string GetNum(string val)
{
    string res = ""; // Assign it an empty string. 
    var numToRom = new Dictionary<string, string>
                       {
                           {"1","I"},
                           {"2","II"}
                           //so on
                       };

        numToRom.TryGetValue(val, out res);
        return res;
}
公共字符串GetNum(字符串val)
{
string res=”“;//为其分配一个空字符串。
var numToRom=新字典
{
{“1”,“I”},
{“2”,“II”}
//诸如此类
};
numToRom.TryGetValue(val,out res);
返回res;
}

案例“编号==1”“< /代码>应该类似于<代码>案例1:< /代码>,其余的用例和变量<代码>罗马< /代码>在使用之前应该被初始化。Read:你没有给你的变量Road赋值,而且使用开关不是正确的,这不是家庭作业,或者你不需要使用<代码>开关< /代码>,我会考虑。此任务的不同设计。
case“Number==1”“< /代码>应该类似于<代码>案例1:< /代码>,其余的用例和变量<代码>罗马< /代码>在使用之前应该被初始化。Read:你没有给你的变量Road赋值,而且使用开关不是正确的,这不是家庭作业,或者你不需要使用<代码>开关< /代码>,我会考虑。此任务的不同设计。我的单击事件下已列出roman的值。我的单击事件下已列出roman的值。我想您的意思是
开关(数字)
而不是
开关(罗马)
as Roman没有初始化,甚至没有使用。这不起作用,因为你不能隐式地将int转换为string,而且当他们在文本框中输入数字1-10时,它也不会显示为相应的罗马数字。我已经更新了我的答案。当你的文本值为1-10时,它在你的
lblRoman.text中返回罗马值>如果其他人也有同样的问题,我必须使用switch(Roman=Number)来解决。你想要的是什么,我无法理解。它正在工作。我想你的意思是
switch(Number)
不是
switch(Roman)
,因为Roman没有初始化,甚至没有使用。这不起作用,因为你不能隐式地将int转换为字符串