public string Valid(OleDbDataReader myreader, int stval)
{
object val = myreader[stval];
if (val != DBNull.Value)
{
return val.ToString() ;
}
else
{
Convert.ToString(0);
}
}
出现错误“并非所有代码路径都返回值” 请帮忙
答案 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