C#不能隐式转换类型';字符串';至';System.Windows.Forms.TextBox';并非所有代码路径都返回值
我必须计算从另一个类调用该方法的3个变量。但在打印结果之前,我必须将int结果转换为预定的值字母。但是我的代码不起作用。我在代码上有以下错误: CS0029 C#无法将类型“string”隐式转换为“System.Windows.Forms.TextBox” CS0161 C#'':并非所有代码路径都返回值 我试图将函数转换为字符串,但代码仍然无法工作 这是一节课: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
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。将其更改为justelse
,因为您已经涵盖了所有其他等级
理想情况下,代码应遵循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()
withreturn 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;
}