I';m得到以下错误:并非所有代码路径都返回一个值(BepaalTafel).谁能帮我解决这个问题
本文关键字:一个 返回 BepaalTafel 问题 解决 路径 错误 代码 | 更新日期: 2023-09-27 18:22:18
我想制作一个数字为1到10的组合框。
private void cbKiesTafel_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
int i = 1;
while (i <= 10)
{
string KiesTafel = ((ComboBoxItem)cbKiesTafel.SelectedItem).Content.ToString();
lbTafels.Items.Add(BepaalTafel(KiesTafel));
i++;
}
}
private string BepaalTafel(string KiesTafel) (the problem is here)
{
int i = 1;
while (i <= 10)
i++;
switch (KiesTafel)
{
case "1":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*1).ToString());
case "2":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*2).ToString());
case "3":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*3).ToString());
case "4":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*4).ToString());
case "5":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*5).ToString());
case "6":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*6).ToString());
case "7":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*7).ToString());
case "8":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*8).ToString());
case "9":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*9).ToString());
case "10":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*10).ToString());
}
}
看起来您需要一个default
选项:
switch (KiesTafel)
{
case "1":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*1).ToString());
case "2":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*2).ToString());
case "3":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*3).ToString());
case "4":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*4).ToString());
case "5":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*5).ToString());
case "6":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*6).ToString());
case "7":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*7).ToString());
case "8":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*8).ToString());
case "9":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*9).ToString());
case "10":
return (lbTafels.Items.Add(i + " x " + KiesTafel + " = " + i*10).ToString());
default:
return "";
}
除非在其中放置default
,否则编译器会认为Hold on, if KiesTafel is none of the case values, then what am I supposed to return?
虽然所有其他答案都能正确解决您手头的问题,但我想指出您整体方法中的一些缺陷:
您的方法BepaalTafel
试图访问全局对象,这可能会给您带来很多麻烦,通常被认为是不好的做法。
您的方法返回一个字符串,而它已经添加到ComboBox项中,这充其量是多余的。
相反,我建议使用一种更简单的方式来生成所需的项目:
private void cbKiesTafel_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string KiesTafel = ((ComboBoxItem)cbKiesTafel.SelectedItem).Content.ToString();
int kies = 0;
int.TryParse(KiesTafel, out kies);
var tafels = Enumerable.Range(1, 10).Select(i => string.Format("{0} x {1} = {2}", kies, i, i * kies));
lbTafels.ItemSource = tafels;
}
您的case
语句没有在所有输入上返回值,因此您的方法也不是,因此编译器会抱怨。
在您的switch
中添加一个default
(当开关与任何其他情况都不匹配时,它会被命中)并返回一些内容。
switch (KiesTafel)
{
case 1: ...
case 2: ...
...
default:
return String.Empty;
}
在开关中添加带有返回的默认情况,或在开关后添加返回。
如果您的值既不是所描述的值(从1到10),那么它将不会返回。因此,您会得到一个错误,指出并非所有代码路径都返回值。
您可以通过在switch
的末尾添加default
关键字来解决此问题。
default:
return String.Empty;
另一个解决方案可能是,如果不满足值,则返回一些东西。就在方法的末尾,编写return String.Empty;