C# - 在try块外定义var并返回它

dbs*_*bss 0 c# scope var try-catch-finally

我是一个新手,并试图回到编程游戏.对不起我的无知和缺乏知识.

我试图在下面的代码中看到如何修复返回类型错误消息.我知道我可以使用显式数据类型在try块之外定义变量,但可以为'var'或任何其他建议完成.

private IEnumerable GetDirFiles(String location)
{
    try
    {
        //Search all directories for txt files
        var emailfiles = Directory.EnumerateFiles(location, "*.txt", SearchOption.AllDirectories);
    }
    catch(Exception ex)
    {
        Console.WriteLine("Message for admins: " + ex.Message);
    }
    finally
    {
        textBox1.Clear();
        var emailfiles = Directory.EnumerateFiles(location, "*.msg", SearchOption.AllDirectories);
    }

    return emailfiles;
}
Run Code Online (Sandbox Code Playgroud)

错误消息是"当前上下文中不存在emailfiles",我理解为什么因为它是在try块中定义的.

谢谢.

Bra*_*NET 5

是的,您需要在块外声明emailFiles,并且var不会有效(没有一些体操).

var需要赋值,因为它使用隐式类型.如果没有值,则无法从中获取类型.

你唯一的另一种选择是return来自try和catch块,而不是在方法的最后.

正如@AdamVincent所说,你有一个更大的问题; 这是因为finally块总是执行(无论异常或缺少),返回值实际上总是如此Directory.EnumerateFiles(location, "*.msg", SearchOption.AllDirectories).你可能意味着要进入catch街区.