我正在尝试将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#是否具有相似的等价,还是我必须为每种可能性创建一种方法?
答案 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);
}