Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# try-catch块外部的变量丢失值_C#_.net - Fatal编程技术网

C# try-catch块外部的变量丢失值

C# try-catch块外部的变量丢失值,c#,.net,C#,.net,我有点小问题。我有一个函数,在try-catch-finally块外有一个字符串,该字符串根据块内发生的情况而改变。一旦完成,我想显示它。我的问题是,在块中更改的值返回到原来的值。我怎样才能解决这个问题 string error = "No issues"; try{ error = "Correct"; }catch(Exception ex){ error = "Wrong:" + ex.Message.ToString(); }finally{ // Closes

我有点小问题。我有一个函数,在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);

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

正确的

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

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

它永远不会显示信息

没问题

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

error
在您发布的代码中永远不会丢失一个值(如我猜为null)。最终错误将超出范围(例如,当您退出定义此代码的方法时)

更新

我获取了您的代码,创建了一个全新的WinForms项目,双击Form1创建了一个加载事件处理程序,并在代码中发布如下内容:

    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);
    }
结果是一个消息框显示“正确”


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

没有示例代码吗?真的吗?最后在
中更改它。它将始终运行(模炸弹爆炸、JVM错误、断电)。它将帮助您显示当前状态code@lukas:没有JVM错误会影响.NET代码:-)该代码没有问题。请提供一个我们可以执行的代码示例,以演示您的问题。好吧,这就是问题所在:它向我显示“没有问题”,而实际上它不应该。我对它进行了全程跟踪,但一旦它退出,它就会返回初始值“无问题”。@JesusZamora一旦退出,它就没有任何价值。不,它确实有价值。它随它一起出现,一旦try-catch时钟结束,它就会返回到初始化的值。它永远不会变成null。@JesusZamora:我只能想象你没有发布足够的代码来完全重现你所看到的内容。查看我的更新。