C# 此方法中并非所有代码都返回值

C# 此方法中并非所有代码都返回值,c#,.net,C#,.net,这是我用来检查数据表中是否有标题匹配的方法: public static bool checkBook(DataTable dt, String title) { try { foreach (DataRow dr in dt.Rows) { String checktitle = dr["Title"].ToString(); if (title == checktitle)

这是我用来检查数据表中是否有标题匹配的方法:

public static bool checkBook(DataTable dt, String title)
{
    try
    {
        foreach (DataRow dr in dt.Rows)
        {
            String checktitle = dr["Title"].ToString();
            if (title == checktitle)
                return true;
            else
                return false;
    }
    catch (Exception ex)
    {
        //do something
        return false;
     }
}

但是有一个问题,我尝试使用try和catch,但为什么没有返回值?

dt.Rows
中没有枚举任何内容的情况下,您不会从
try
块返回任何内容


在try块中的foreach之外,只需添加
returnfalse

dt.Rows
中没有枚举任何内容的情况下,您不会从
try
块返回任何内容

在try块中的foreach之外,只需添加
returnfalse

如果数据中没有行,会发生什么情况?
然后返回什么?

如果数据中没有行,会发生什么情况?

然后返回什么?

存在错误,因为如果datatable中没有行,则不会从代码中返回任何内容,因此需要
返回false
,如下所示

为您优化代码:

    public static bool checkBook(DataTable dt, String title)
    {
      bool returnval= false;
      try 
      {

         foreach (DataRow dr in dt.Rows)
            {
                String checktitle = dr["Title"].ToString();
                if (title == checktitle)
                {
                    returnval= true;
                }

        }
    catch (Exception ex)
    {
     //do something
    }
    return returnval;
   }

存在错误,因为如果datatable中没有行,则不会从代码中返回任何内容,因此需要
返回false
,如下代码所示

为您优化代码:

    public static bool checkBook(DataTable dt, String title)
    {
      bool returnval= false;
      try 
      {

         foreach (DataRow dr in dt.Rows)
            {
                String checktitle = dr["Title"].ToString();
                if (title == checktitle)
                {
                    returnval= true;
                }

        }
    catch (Exception ex)
    {
     //do something
    }
    return returnval;
   }

不要滥用异常,尤其是未指定的异常:改用测试。foreach是不必要的(也是您问题的根源),因为它总是在第一次出现时返回,但是如果有0行,它将永远不会返回值。我猜您希望执行以下操作
return dt.rows.Cast()。Select(r=>r[“Title”].ToString())。有吗(t=>t==title);
如果你得到了想要的信息,别忘了将答案标记为已接受。不要滥用异常,尤其是未指定的异常:改用测试。foreach是不必要的(也是问题的根源),因为它将始终在第一次出现时返回,但是如果有0行,它将永远不会返回值。我猜您希望执行以下操作
return dt.rows.Cast().Select(r=>r[“Title”].ToString()).Any(t=>t==Title);
如果您获得了所需的信息,请不要忘记将应答标记为ACCPEED。。