试图将Optional转换为C#

时间:2012-06-26 15:31:38

标签: c#-4.0 vb.net-to-c#

我正在尝试将vb.net代码转换为C#,但在其中一个函数中遇到了可选项。

Private Function doOpenConnection(ByRef cn As OleDb.OleDbConnection, ByRef cmd As OleDb.OleDbCommand, ByVal sConnString As String, Optional ByVal sUSP As String = "") As Boolean

似乎不是使用重载,VB.Net可以选择将其创建为一个方法/函数。 C#是否具有相似的等价,还是我必须为每种可能性创建一种方法?

2 个答案:

答案 0 :(得分:1)

C#与C#4相同:

private bool doOpenConnection(ref OleDb.OleDbConnection cn,
                              ref OleDb.OleDbCommand cmd,
                              string sConnString,
                              string sUSP = "")

请注意,您可能需要ref来获取前两个参数 - 了解how parameter passing works in C#非常重要。

C#4有命名参数可选参数。有关详细信息,请参阅MSDN。请注意,存在各种限制,因为可选参数必须在必需参数之前(除了参数数组),并且默认值必须是常量(或者您可以使用default(...)运算符)。

答案 1 :(得分:1)

您可以在C#中使用optional parameters

来自MSDN:

  

每个可选参数都有一个默认值作为其定义的一部分。如果没有为该参数发送参数,则使用默认值。默认值必须是以下类型的表达式之一:

     
      
  • 一个常量表达式;

  •   
  • 新形式ValType()的表达式,其中ValType是值类型,例如枚举或结构;

  •   
  • 表单default(ValType),其中ValType是值类型。

  •   
     

可选参数在任何必需参数之后在参数列表的末尾定义。如果调用者为一系列可选参数中的任何一个提供参数,则它必须为所有前面的可选参数提供参数。不支持参数列表中以逗号分隔的间隙。例如,在以下代码中,实例方法ExampleMethod定义了一个必需参数和两个可选参数。

    public void ExampleMethod(int required, string optionalstr = "default string",
        int optionalint = 10)
    {
        Console.WriteLine("{0}: {1}, {2}, and {3}.", _name, required, optionalstr,
            optionalint);
    }