我很难理解为什么这总是会返回一个空变量
Private Function checkEnvelopeStatus(aEnvelopeID As String) As String
Dim lEnvelopeStatusMessage As String
Try
Dim lEnvelopeStatus = mDsapi.RequestStatusEx(aEnvelopeID)
lEnvelopeStatusMessage = "Subject:" & lEnvelopeStatus.Subject & vbCrLf & "Status Code: " & lEnvelopeStatus.Status
Catch ex As Exception
MessageBox.Show(ex.StackTrace, ex.Message)
End Try
Return lEnvelopeStatusMessage
End Function
然而,这将返回我想要的信息
Private Function checkEnvelopeStatus(aEnvelopeID As String) As String
Dim lEnvelopeStatusMessage As String
Try
Dim lEnvelopeStatus = mDsapi.RequestStatusEx(aEnvelopeID)
aEnvelopeID = "Subject:" & lEnvelopeStatus.Subject & vbCrLf & "Status Code: " & lEnvelopeStatus.Status
Catch ex As Exception
MessageBox.Show(ex.StackTrace, ex.Message)
End Try
Return aEnvelopeID
End Function
当我的TRy catch关闭后,函数的本地变量似乎被清除掉了。然而,当我用进入的参数替换它时,我能够保留Try Catch外部的字符串吗?我主要是一个C#/ C ++开发人员,所以这对我来说是混乱的行为。谁能解释为什么会发生这种情况?
这是上面代码的一个更加清理的版本
Public Function foo(a As String) As String
Dim b As String
Try
b = "banana:"
Catch ex As Exception
End Try
Return b
End Function
它表现出相同的行为。
答案 0 :(得分:3)
在C#中,您无法在执行流程中编译路径存在的方法代码,这可能导致从方法退出而不初始化返回值。使用未分配的变量会出现编译器错误。
在VB.NET中,如果更改了选项,则可以避免错误 在项目选项的“生成”页面中,“在分配前使用变量”从警告到错误。 (我强烈建议这样做)
(不确定选项的确切名称,因为我使用的是Visual Studio的本地化版本)
答案 1 :(得分:1)
该代码不应该编译,我试过这个,它给了我一个编译器错误“错误3使用未分配的局部变量'b'”
你的编译器出了什么问题,你在用什么?
static public string foo(string a)
{
String b;
try
{
b = "banana";
}
catch
{
}
return b;
}
答案 2 :(得分:1)
直到你重新抛出这个消息才能编译。请考虑以下事项:
public String foo(String a) {
String b;
try {
b="banana:";
}
catch {
throw;
}
return b;
}
此代码将编译,因为如果有异常,则重新抛出。 编译器预测像无法访问的代码这样的逻辑问题(尽管无法访问的代码不是错误)。 VB.net中的等价:
Public Function foo(a As String) As String
Dim b As String
Try
b = "banana:"
Catch ex As Exception
Throw ex
End Try
Return b
End Function
顺便说一句,捕获任何异常被认为是编码的不良做法。
答案 3 :(得分:0)
我在C#中编写了相同的代码
public string foo(string a)
{
String b;
try
{
b = "banana";
}
catch
{
}
return b;
}
}
它似乎表现出相同的行为。我被收回了。更多地考虑它,这是有道理的。我只是声明变量实际上并没有将它定义为任何东西。所以用这样的东西代替上面的例子:
public string foo(string a)
{
String b = "";
try
{
b = "banana";
}
catch
{
}
return b;
}
}
解决了我所有的问题。希望这可以帮助将来的某个人。你知道的越多......