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

时间:2011-09-08 06:30:14

标签: c#

public string Valid(OleDbDataReader myreader, int stval)
{
    object val = myreader[stval];

    if (val != DBNull.Value)
    {
        return val.ToString() ;
    }
    else
    {
        Convert.ToString(0);
    }
}

出现错误“并非所有代码路径都返回值” 请帮忙

2 个答案:

答案 0 :(得分:3)

您需要了解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
        }
    }

答案 1 :(得分:3)

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

在您的情况下,如果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