我有一点问题。我有一个函数,在try-catch-finally块之外有一个字符串,根据块内部发生的情况而改变。一旦完成,我想显示它。我的问题是块中更改的值返回到它具有的原始值。我该如何解决这个问题?
string error = "No issues";
try{
error = "Correct";
}catch(Exception ex){
error = "Wrong:" + ex.Message.ToString();
}finally{
// Closes connection
}
MessageBox.Show(error);
答案 0 :(得分:0)
我不清楚,如果有问题的字符串在方法之外声明。如果您100%确定,为字符串赋予了新值,则以下代码可能会解决您的问题:
static void Foo(string s)
{
try
{
s = "OK";
}
catch { }
}
static void Main(string[] args)
{
string temp = "??";
Foo(temp);
Console.WriteLine(temp); //prints ??
Console.ReadLine();
}
因为您按值传递字符串。如果您需要更改值,您应该:
制作ref
参数:
static void Foo(ref string s)
并将其命名为
Foo(ref temp);
或从方法中返回新值:
static string Foo(string s)
{
try
{
s = "OK";
}
catch { }
return s;
}
并称之为:
temp = Foo(temp);
答案 1 :(得分:0)
您发布的代码会显示一个带有文字
的消息框正确
如果没有抛出异常,否则消息
错误:(加上异常的消息属性)
它永远不会显示消息
没有问题
因为你在try块的第一行覆盖了error
的初始值。
error
永远不会丢失一个值(就像我猜成 null 一样)。最终错误将超出范围(例如,当您退出定义此代码的方法时)。
<强>更新强>
我拿了你的代码,创建了一个全新的WinForms项目,双击Form1来创建一个Load事件处理程序,并在你的代码中发布如下:
private void Form1_Load(object sender, EventArgs e)
{
string error = "No issues";
try
{
error = "Correct";
}
catch (Exception ex)
{
error = "Wrong:" + ex.Message.ToString();
}
finally
{
// Closes connection
}
MessageBox.Show(error);
}
结果是一个消息框,上面写着“正确”。
如果这不是您在实际代码中看到的内容,则表示您没有共享足够的代码来重现问题。