【问题标题】:Variable scope try, finally变量作用域 try, finally
【发布时间】:2013-05-16 06:26:40
【问题描述】:

这是我的代码。我有一个尝试和最后的声明。在 try 块中,我有一个设置指针变量的固定语句。

try
{
    fixed (char* chRef = p)
    {
        //code
    }
}
finally
{
    chRef = null;
}

我正在努力寻找一种将固定指针变量设置为 null 的方法,无论 try 因范围而退出。请帮忙。

char* chRef;
try
{
    fixed (chRef = p)
    {
        //code
    }
}
finally
{
    chRef = null;
}

给我“错误 12 在固定语句中声明的本地类型必须是指针类型”

【问题讨论】:

  • AFAIK,您必须在更广泛的范围内声明(您不必初始化它)chRef var。也就是说,在try之前。
  • 哇一个 c# 中的指针。那很有意思。 :-)
  • @AndreCalil 感谢尝试过。给我分配的标识符预期错误。
  • 你打算如何处理指向 NULL 的 chRef?
  • 将其设置为 null 毫无意义。该变量超出了固定语句末尾的范围。如果你愿意,你不能滥用它。不要解决这个问题。

标签: c# scope try-catch finally


【解决方案1】:

如果这是可能的,您需要确保chRef 在范围内。这意味着将它放在fixed 语句中。所以你会这样写:

fixed (char* chRef = p)
{
    try
    {
        //code
    }
    finally
    {
        chRef = null;
    }
}

但这不起作用,因为不允许您分配指针chRef。毕竟,它是固定的!如果您尝试将编译器对象分配给固定指针:

错误 CS1656:无法分配给“chRef”,因为它是“固定变量”

即使你能做到这一点,但你做不到,那也没有意义。由于chRef 即将离开作用域,当您知道没有任何东西可以观察到该修改时,修改它是没有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 2014-12-13
    • 2014-08-09
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多