C#不能隐式转换类型';字符串';至';System.Windows.Forms.TextBox';并非所有代码路径都返回值

C#不能隐式转换类型';字符串';至';System.Windows.Forms.TextBox';并非所有代码路径都返回值,c#,C#,我必须计算从另一个类调用该方法的3个变量。但在打印结果之前,我必须将int结果转换为预定的值字母。但是我的代码不起作用。我在代码上有以下错误: CS0029 C#无法将类型“string”隐式转换为“System.Windows.Forms.TextBox” CS0161 C#'':并非所有代码路径都返回值 我试图将函数转换为字符串,但代码仍然无法工作 这是一节课: class Nilai { public int Calculate(int tugas, int ut

我必须计算从另一个类调用该方法的3个变量。但在打印结果之前,我必须将int结果转换为预定的值字母。但是我的代码不起作用。我在代码上有以下错误:

CS0029 C#无法将类型“string”隐式转换为“System.Windows.Forms.TextBox” CS0161 C#'':并非所有代码路径都返回值

我试图将函数转换为字符串,但代码仍然无法工作

这是一节课:

 class Nilai
    {
        public int Calculate(int tugas, int uts, int uas)
        {
            int final = (tugas + uts + uas) / 3;
            return final;
        }
    }
这是
表格1

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

        private void button1_Click(object sender, EventArgs e)
        {

            nilaiHuruf1 = nilaiHuruf();
        }

       public string nilaiHuruf()
        {
            int a = Convert.ToInt32(tugas1.Text);
            int b = Convert.ToInt32(uts1.Text);
            int c = Convert.ToInt32(uas1.Text);
            Nilai vnilai = new Nilai();
            int hasil = vnilai.Calculate(a, b, c);
            if (hasil >= 85)
            {
                nilaiHuruf1.Text = "A";
                return nilaiHuruf1.ToString();
            }
            else if (hasil >= 80)
            {
                nilaiHuruf1.Text = "A-";
                return nilaiHuruf1.ToString();
            }
            else if (hasil >= 75)
            {
                nilaiHuruf1.Text = "B+";
                return nilaiHuruf1.ToString();
            }
            else if (hasil >= 70)
            {
                nilaiHuruf1.Text = "B";
                return nilaiHuruf1.ToString();
            }

            else if (hasil >= 65)
            {
                nilaiHuruf1.Text = "B-";
                return nilaiHuruf1.ToString();
            }

            else if (hasil >= 60)
            {
                nilaiHuruf1.Text = "C+";
                return nilaiHuruf1.ToString();
            }

            else if (hasil >= 55)
            {
                nilaiHuruf1.Text = "C";
                return nilaiHuruf1.ToString();
            }
            else if (hasil >= 45)
            {
                nilaiHuruf1.Text = "D";
                return nilaiHuruf1.ToString();
            }
            else if (hasil <= 44.99)
            {
                nilaiHuruf1.Text = "E";
                return nilaiHuruf1.ToString();
            }
        }
            }

        }
名称空间IP\u计算器
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
nilaiHuruf1=nilaiHuruf();
}
公共字符串nilaiHuruf()
{
int a=Convert.ToInt32(tugas1.Text);
intb=Convert.ToInt32(uts1.Text);
int c=Convert.ToInt32(uas1.Text);
Nilai vnilai=新的Nilai();
int hasil=vnilai.Calculate(a,b,c);
如果(hasil>=85)
{
nilaiHuruf1.Text=“A”;
返回nilaiHuruf1.ToString();
}
否则如果(hasil>=80)
{
nilaiHuruf1.Text=“A-”;
返回nilaiHuruf1.ToString();
}
否则如果(hasil>=75)
{
nilaiHuruf1.Text=“B+”;
返回nilaiHuruf1.ToString();
}
否则如果(hasil>=70)
{
nilaiHuruf1.Text=“B”;
返回nilaiHuruf1.ToString();
}
否则如果(hasil>=65)
{
nilaiHuruf1.Text=“B-”;
返回nilaiHuruf1.ToString();
}
否则如果(hasil>=60)
{
nilaiHuruf1.Text=“C+”;
返回nilaiHuruf1.ToString();
}
否则如果(hasil>=55)
{
nilaiHuruf1.Text=“C”;
返回nilaiHuruf1.ToString();
}
否则如果(hasil>=45)
{
nilaiHuruf1.Text=“D”;
返回nilaiHuruf1.ToString();
}

else if(hasil我认为这很简单。当
nilaiHuruf1
是一个文本框时,您不能直接为其分配字符串-您必须设置文本框的
Text
属性:

private void button1_Click(object sender, EventArgs e)
{
    nilaiHuruf1.Text = nilaiHuruf();
}
nilaiHuruf()

更新

nilaiHuruf1.Text
的值在方法
nilaiHuruf()
中更改时,为什么要返回该值并将其重新设置为
nilaiHuruf1
文本框?按如下方式删除赋值,所有操作都应正常:

private void button1_Click(object sender, EventArgs e)
{
    nilaiHuruf();
}
首先,我建议提取方法(业务逻辑和UI分离)。在您的案例中,业务逻辑位于
Nilai
类中:

 //TODO: think over making entire class static: static class Nilai
 class Nilai {
   // static: you don't want "this" here
   public static int Calculate(int tugas, int uts, int uas) {
     return (tugas + uts + uas) / 3;
   }

   public static string Mark(int mark) {
     if (mark >= 85)
       return "A";
     else if (mark >= 80)
       return "A-";
     else if (mark >= 75)
       return "B+";
     else if (mark >= 70)
       return "B";
     else if (mark >= 65)
       return "B-";    
     else if (mark >= 60)
       return "C+";
     else if (mark >= 55)
       return "C"; 
     else if (mark >= 45)
       return "D"; 
     else
       return "E"; 
   }
 }
然后使用它(表单1中的UI)


由于将返回的字符串从函数直接分配给文本框,因此引发了错误
无法将类型“string”隐式转换为“System.Windows.Forms.TextBox”
。您需要更改此属性以使用
Text
属性-
nilaiHuruf1.Text=nilaiHuruf();

由于您没有处理int值的所有情况,因此引发了错误
并非所有代码路径都返回值
。特别是,如果
,您最后一次执行
else。将其更改为just
else
,因为您已经涵盖了所有其他等级

理想情况下,代码应遵循SOP,并可简化为:

private void button1_Click(object sender, EventArgs e)
{
    nilaiHuruf1.Text = nilaiHuruf(Convert.ToInt32(tugas1.Text), Convert.ToInt32(uts1.Text), Convert.ToInt32(uas1.Text));
}

public string nilaiHuruf(int a, int b, int c)
{
    string rtn = "";
    Nilai vnilai = new Nilai();
    int hasil = vnilai.Calculate(a, b, c);
    if (hasil >= 85)
    {
        rtn = "A";
    }
    else if (hasil >= 80)
    {
        rtn = "A-";
    }
    else if (hasil >= 75)
    {
        rtn = "B+";
    }
    else if (hasil >= 70)
    {
        rtn = "B";
    }
    else if (hasil >= 65)
    {
        rtn = "B-";
    }
    else if (hasil >= 60)
    {
        rtn = "C+";
    }
    else if (hasil >= 55)
    {
        rtn = "C";
    }
    else if (hasil >= 45)
    {
        rtn = "D";
    }
    else
    {
        rtn = "E";
    }

    return rtn;
}

由于函数
nilaiHuruf
不再依赖于表单中的任何值,因此根据该类的用途,可以选择将其移动到
Nilai
类。

例外是,您的代码并非所有代码路径都返回值。如果查看上一个If,则它没有其他值。您必须从m所有代码块

您只需返回
nilaiHuruf1.Text

可供选择的解决方案。适用于C#7及以上版本

private void button1_Click(object sender, EventArgs e)
{
    nilaiHuruf1.Text = nilaiHuruf();
}

public string nilaiHuruf()
{
    int.TryParse(tugas1.Text, out int a);
    int.TryParse(uts1.Text, out int b);
    int.TryParse(uas1.Text, out int c);

    Nilai vnilai = new Nilai();

    int hasil = vnilai.Calculate(a, b, c);

    string mark = "";

    switch (hasil)
    {
        case int n when (n >= 85):
            mark = "A";
            break;

        case int n when (n >= 80):
            mark = "A-";
            break;

        case int n when (n >= 75):
            mark = "B+";
            break;

        case int n when (n >= 70):
            mark = "B";
            break;

        //// fill other cases

        default:
            mark = "E";
            break;
    }

    return mark;
}
尝试替换:

返回nilaiHuruf1.ToString();

在您的
if
语句中:


return nilaiHuruf1.Text;

来自
nilaiHuruf()
函数-要将值赋给textbox还是要将字符串作为结果返回?请尝试替换所有
return nilaiHuruf1.ToString()
with
return nilaiHuruf1.Text;
谢谢你的回答,但是代码不起作用,因为函数nilaiHuruf不能定义(int a,int b,int c)变量。你知道吗,我怎样才能使函数不必在函数中声明变量(a,b,c),而是在按钮上声明它?
private void button1_Click(object sender, EventArgs e)
{
    nilaiHuruf1.Text = nilaiHuruf();
}

public string nilaiHuruf()
{
    int.TryParse(tugas1.Text, out int a);
    int.TryParse(uts1.Text, out int b);
    int.TryParse(uas1.Text, out int c);

    Nilai vnilai = new Nilai();

    int hasil = vnilai.Calculate(a, b, c);

    string mark = "";

    switch (hasil)
    {
        case int n when (n >= 85):
            mark = "A";
            break;

        case int n when (n >= 80):
            mark = "A-";
            break;

        case int n when (n >= 75):
            mark = "B+";
            break;

        case int n when (n >= 70):
            mark = "B";
            break;

        //// fill other cases

        default:
            mark = "E";
            break;
    }

    return mark;
}