try catch块外的变量失去值
本文关键字:变量 失去 catch try | 更新日期: 2023-09-27 17:51:14
我有一个小问题。我有一个函数,在try-catch-finally块外面有一个字符串,它根据块内发生的事情而改变。一旦完成,我想显示它。我的问题是,在块中更改的值返回到它的原始值。我该如何解决这个问题?
string error = "No issues";
try{
error = "Correct";
}catch(Exception ex){
error = "Wrong:" + ex.Message.ToString();
}finally{
// Closes connection
}
MessageBox.Show(error);
我不清楚,是否有问题的字符串在方法外部声明。如果您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);
您发布的代码将显示一个带有文本
的消息框正确
如果没有抛出异常,否则消息
错误:(加上异常的message属性)
它永远不会显示消息
没有问题
,因为您覆盖了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);
}
结果是一个消息框,上面写着"正确"。
如果这不是你在实际代码中看到的,那么你没有分享足够的代码来重现这个问题。