导致错误的原因“并非所有代码路径都返回一个值”

本文关键字:返回 路径 一个 代码 错误 | 更新日期: 2023-09-27 18:07:51

public string Valid(OleDbDataReader myreader, int stval)
{
    object val = myreader[stval];
    if (val != DBNull.Value)
    {
        return val.ToString() ;
    }
    else
    {
        Convert.ToString(0);
    }
}

存在错误" not all code paths return a value"请帮助

导致错误的原因“并非所有代码路径都返回一个值”

你需要阅读基本的C函数。

作为返回字符串值的函数,在任何情况下都必须返回一个值。这也包括else部分。

原因是如果执行了其他部分,则需要返回字符串值,但没有返回:

public string Valid(OleDbDataReader myreader, int stval)
    {
        object val = myreader[stval];
        if (val != DBNull.Value)
        {
            return val.ToString() ;
        }
        else
        {
           return Convert.ToString(0); //forgot to write return over her
        }
    }

创建一个返回值的函数时,需要确保通过该函数的所有可能路径最终都返回一个值。

在您的例子中,如果myreader[stval]等于DBNull.Value,则不返回任何值,因为它将进入else子句并简单地下降到函数的末尾,不返回任何值:

public string Valid(OleDbDataReader myreader, int stval)
{
    object val = myreader[stval];
    if (val != DBNull.Value)
    {
        return val.ToString() ;
    }
    else
    {
        Convert.ToString(0);
    }
}

我个人的意见是这样写更好:

public string Valid (OleDbDataReader myreader, int stval) {
    object val = myreader[stval];
    if (val != DBNull.Value)
        return val.ToString() ;
    return Convert.ToString(0);
}

换句话说,通常最好在最后提供一个默认情况,以确保不会发生这种情况。每当我看到这样的代码:

if something:
    return or exit
else:
    do something else

,因为它不必要地复杂,并且可能导致您的问题中描述的那种问题(以及缩进地狱)。使用更简单的

要好得多(再次强调,这是我的观点,但有多年的经验支持):
if something:
    return or exit
do something else