Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中类方法返回值的困惑#_C#_Asp.net_Asp.net Mvc 4 - Fatal编程技术网

C# C中类方法返回值的困惑#

C# C中类方法返回值的困惑#,c#,asp.net,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc 4,我试图在C#中构建一个数据库构造函数(factory?),但是我对如何在“所有路径都返回一个值”的情况下管理错误感到困惑 例如,下面是一个我想用来返回数据库连接的类: public class DB { static SqlConnection Connect() { SqlConnection thisConnection; try { thisConnection = new SqlConnection(connec

我试图在C#中构建一个数据库构造函数(factory?),但是我对如何在“所有路径都返回一个值”的情况下管理错误感到困惑

例如,下面是一个我想用来返回数据库连接的类:

public class DB
{
    static SqlConnection Connect()
    {
        SqlConnection thisConnection;

        try { 
            thisConnection = new SqlConnection(connectionString);
        }
        catch (SqlException e) { Console.WriteLine(e.Message); }

        return thisConnection;
    }
}
显然,这是行不通的,因为“并非所有路径都返回值”


当方法实际返回值时,如何使用try/catch?显然,我不是一个程序员大师;)但我正在处理它。

您可以从catch语句中返回
null
或重新抛出异常但是使用静态连接并不是一个好主意。数据库连接规则应为“尽可能晚地打开,尽可能早地关闭”

您应该将您的连接封装在其中,以确保在使用块结束时对其进行处理(关闭)

using(SqlConnection connection = new SqlConnection(connectionString))
{
  //execute your command etc. 
}

您可以从catch语句返回
null
或重新抛出异常但是使用静态连接并不是一个好主意。数据库连接规则应为“尽可能晚地打开,尽可能早地关闭”

您应该将您的连接封装在其中,以确保在使用块结束时对其进行处理(关闭)

using(SqlConnection connection = new SqlConnection(connectionString))
{
  //execute your command etc. 
}

例如,总是返回一些内容

  public bool yesno()
    {
        bool mybool = false;
        try
        {
            mybool = true;
        }
        catch
        {
            mybool = false;

        }
        return mybool;
    }

例如,总是返回一些内容

  public bool yesno()
    {
        bool mybool = false;
        try
        {
            mybool = true;
        }
        catch
        {
            mybool = false;

        }
        return mybool;
    }

如果您无法用给定的连接字符串实例化对象,我将设置thisConnection=null,然后返回它。然后在调用此函数后检查null,如

  If (DB.Connect("ConnectionString") != null) {
      //Connection successful
  }
  else {
     //Failed
  }


 public class DB
 {
     Static SqlConnection Connect(string connectionString)
     {
        SqlConnection thisConnection = null;

        try { 
          thisConnection = new SqlConnection(connectionString);
        }
        catch (SqlException e) { Console.WriteLine(e.Message); }

        return thisConnection;
}

}

如果无法使用给定的连接字符串实例化对象,我会将thisConnection设置为null,然后返回它。然后在调用此函数后检查null,如

  If (DB.Connect("ConnectionString") != null) {
      //Connection successful
  }
  else {
     //Failed
  }


 public class DB
 {
     Static SqlConnection Connect(string connectionString)
     {
        SqlConnection thisConnection = null;

        try { 
          thisConnection = new SqlConnection(connectionString);
        }
        catch (SqlException e) { Console.WriteLine(e.Message); }

        return thisConnection;
}

}

确定连接尝试失败时要执行的操作,并在catch块中执行此操作。可能是rethrow exception,或return null,或其他您要捕获异常的内容,请在catch块中重新捕获它或返回null。如果您没有具体计划说明方法如何成功完成其任务,请不要捕获此级别的异常。听起来你好像没有这样的计划,所以不要抓住这里的例外。对于日志记录/通知等,只需在可能的最高级别注册一个异常处理程序。确定连接尝试失败时要执行的操作,并在catch块中执行。可能是rethrow exception,或return null,或其他您要捕获异常的内容,请在catch块中重新捕获它或返回null。如果您没有具体计划说明方法如何成功完成其任务,请不要捕获此级别的异常。听起来你好像没有这样的计划,所以不要抓住这里的例外。对于日志记录/通知等,只需在可能的最高级别注册一个异常处理程序。这不像他保持静态连接一段时间,他只是创建了一个静态工厂方法来处理构造和一些额外的错误处理。很有趣,谢谢你。我仍在学习C#(来自更多基于脚本的语言,如python和PHP)。非常不同的方法,但我肯定已经更喜欢了。我想。也许……他并不是暂时保持静态连接,他只是创建了一个静态工厂方法来处理构造,并附加了一些错误处理。很有趣,谢谢你。我仍在学习C#(来自更多基于脚本的语言,如python和PHP)。非常不同的方法,但我肯定已经更喜欢了。我想。大概