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);

try catch块外的变量失去值

我不清楚,是否有问题的字符串在方法外部声明。如果您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);
    }

结果是一个消息框,上面写着"正确"。

如果这不是你在实际代码中看到的,那么你没有分享足够的代码来重现这个问题。