在C#中将CASE从VB转移到SWITCH

时间:2017-02-02 09:29:20

标签: c# vb.net switch-statement

我在VB中有以下代码。

Public Shared Function CreateConnection() As IDbConnection
  Select Case UCase(DatabaseProvider)
        Case "DEVARTUNIVERSAL"
            Dim connection As New UniConnection

            Return connection
        Case "ACCESS"
            Dim connection As New OleDbConnection

            Return connection
        Case "MSQLSERVER2005"
            Dim connection As New SqlConnection

            Return connection
        Case Else
           Throw New Exception("Please select a correct database provider")

        Return Nothing
  End Select

End Function

我把它放在一个实用程序中,并在c#

中创建以下代码
public static IDbConnection CreateConnection()
  {
  switch ((DatabaseProvider.ToUpper()))
     {
     case "DEVARTUNIVERSAL":
        UniConnection connection = new UniConnection();

        return connection;                
     case "ACCESS":
        OleDbConnection connection = new OleDbConnection();

        return connection;
     case "MSQLSERVER2005":
        SqlConnection connection = new SqlConnection();

        return connection;
     default:
        throw new Exception("Please select a correct database provider");

        return null;
     }

  }

这是对的吗? 根据VS2015,第一个案例后的所有变量CONNECTION都与消息“#34;局部变量'连接”错误。已在此范围内定义"。

有人可以帮我这个吗? 感谢

4 个答案:

答案 0 :(得分:2)

将变量声明在switch

之外
public static IDbConnection CreateConnection()
{
    IDbConnection connection;
    switch ((DatabaseProvider.ToUpper()))
    {
        case "DEVARTUNIVERSAL":
            connection = new UniConnection();
            return connection;                
        case "ACCESS":
            connection = new OleDbConnection();
            return connection;
        case "MSQLSERVER2005":
            connection = new SqlConnection();
            return connection;
        default:
            throw new Exception("Please select a correct database provider");

    }
    return null;
}

或者完全跳过变量赋值:

public static IDbConnection CreateConnection()
{
    switch ((DatabaseProvider.ToUpper()))
    {
        case "DEVARTUNIVERSAL":
            return new UniConnection();
        case "ACCESS":
            return new OleDbConnection();
        case "MSQLSERVER2005":
            return new SqlConnection();
        default:
            throw new Exception("Please select a correct database provider");
    }
    return null;
}

答案 1 :(得分:2)

将您的案例包装在范围{}中:

case "DEVARTUNIVERSAL":
{
   UniConnection connection = new UniConnection();
   return connection;  
}

如果案例中没有其他代码,请直接返回对象。

case "DEVARTUNIVERSAL":
   return new UniConnection();

答案 2 :(得分:0)

几乎是正确的。关键是你要命名许多变量" connection"。此外,您似乎不需要变量:您可以这样做:

return new UniConnection();

否则,您可以在交换机上方声明连接变量:

IDbConnection connection;

然后在开关中使用它:

connection = new UniConnection();

在C#中,范围仅由大括号决定,这就是为什么在这种情况下,这些变量声明被认为是在同一范围内。

我希望我的回答能帮到你!

答案 3 :(得分:0)

您不能为该连接使用相同的变量名称。试试这个:

public static IDbConnection CreateConnection()
{
 switch ((DatabaseProvider.ToUpper()))
 {
 case "DEVARTUNIVERSAL":
    UniConnection uniConnection = new UniConnection();

    return uniConnection; 

 case "ACCESS":
    OleDbConnection oleDbConnection = new OleDbConnection();

    return oleDbConnection;

 case "MSQLSERVER2005":
    SqlConnection sqlConnection = new SqlConnection();

    return sqlConnection;

 default:
    throw new Exception("Please select a correct database provider");

    return null;
 }

 }