可选功能参数,默认值为引用

时间:2014-08-18 18:04:16

标签: c# vb.net

通过自动将用VB.NET编写的代码转换为C#,我在VB.NET的函数声明中有这样的情况:

Private Function dataArchiver(ByVal toPlace As String, 
                               Optional ByVal aExtension As String = ".7z", 
                               Optional ByRef createdName As String = "") As Integer

自动转换工具在C#中执行此操作:

private int dataArchiver(string toPlace, 
                         string aExtension = ".7z", 
                         ref string createdName = "")

这当然不起作用。关键字" ref"在最后一个参数用红色下划线之前。 为什么会这样?因为string createdName可能是(并且不必)在函数中生成,并且在这种情况下必须从函数中传递出来。 重要的是,此代码可以与.NET framework 3.5一起使用。

有没有想过在没有太多重新接受VB.NET程序的情况下在C#中使用它?

2 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用out关键字:

string createdName;
int retVal = dataArchiver("to place", out createdName, extension);

你的新方法签名。

private int dataArchiver(string toPlace, 
                      out string createdName,
                      string aExtension = ".7z")
{
    createdName = "some value";

    // rest of your code
}

唯一的变化是out不能有方法签名默认值,因此您需要在方法内设置它。

答案 1 :(得分:1)

您必须为此创建重载方法(就像在C#获取可选参数功能之前一样):

private int dataArchiver(string toPlace, string aExtension)
{
    string tempVar = "";
    return dataArchiver(toPlace, aExtension, ref tempVar);
}

private int dataArchiver(string toPlace)
{
    string tempVar = "";
    return dataArchiver(toPlace, ".7z", ref tempVar);
}

private int dataArchiver(string toPlace, string aExtension, ref string createdName)
{
    return 0;
}