通过自动将用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#中使用它?
答案 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;
}