【问题标题】:Trying to convert Optional into C#尝试将 Optional 转换为 C#
【发布时间】:2012-06-26 15:31:38
【问题描述】:

我正在尝试将 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# 是否有类似的等价物,还是我必须为每种可能性创建一个方法?

【问题讨论】:

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


    【解决方案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(...) 运算符)。

    【讨论】:

    • 是的,最初的程序员在他的 VB 代码中就有了它。我只是想把它转换成c#。感谢您的链接
    【解决方案2】:

    您可以在 C# 中使用optional parameters

    来自 MSDN:

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

    • 一个常量表达式;

    • new 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);
        }
    

    【讨论】:

    • 如果只有 C# 有可选的 refs...唯一的事情阻止我转换
    猜你喜欢
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    相关资源
    最近更新 更多