-6

我有一个小问题。我有一个函数,它在 try-catch-finally 块之外有一个字符串,该函数会根据块内发生的情况而改变。完成后,我想显示它。我的问题是块中更改的值返回到它的原始值。我怎样才能解决这个问题?

string error = "No issues";

try{
    error = "Correct";
}catch(Exception ex){
    error = "Wrong:" + ex.Message.ToString();
}finally{
    // Closes connection
}

MessageBox.Show(error);
4

2 回答 2

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);
于 2013-01-11T02:11:46.497 回答
0

您发布的代码将显示一个带有文本的消息框

正确的

如果没有抛出异常,否则消息

错误:(加上异常的消息属性)

它永远不会显示消息

没有问题

error因为您覆盖了try 块第一行中的初始值。

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

结果是一个显示“正确”的消息框。

如果这不是您在真实代码中看到的,那么您没有共享足够的代码来重现问题。

于 2013-01-11T03:36:18.907 回答