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());
    }
}

I';m得到以下错误:并非所有代码路径都返回一个值(BepaalTafel).谁能帮我解决这个问题

看起来您需要一个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;