Yes, and that only works by changing how scoping works. Unless of course you don't care about the variables created inside.
i.e.
public void DoThing()
{
var someVar = SomeStaticClass.FooFunc();
someVar.DoSomething();
}
catch (Exception x)
{
// Scoping rules will need to change
// to put someVar in scope:
_logger.Log($"{someVar.GetId()} is invalid");
}
finally
{
someVar.Cleanup();
}
And this also implies that there's no way to make a variable declared inside the method inaccessible to the catch block without additional changes to the language.