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

我是一个新手,并试图重新回到编程游戏中。很抱歉我的无知和缺乏知识。


我正在尝试查看如何修复下面代码中的返回类型错误消息。我知道我可以使用显式数据类型在 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;

}

错误消息是“当前上下文中不存在电子邮件文件”,我明白为什么,因为它是在 try 块中定义的。


谢谢。


互换的青春
浏览 166回答 3
3回答

LEATH

是的,您需要在块外声明 emailFiles,并且 novar将不起作用(没有一些体操)。var需要赋值,因为它使用隐式类型。如果没有值,就无法从中获取类型。您唯一的其他选择是return从 try 和 catch 块开始,而不是在方法的末尾。正如@AdamVincent 指出的那样,您遇到了更大的问题;这是因为一个finally块总是执行(无论异常或其缺乏)的返回值将始终实际上是Directory.EnumerateFiles(location, "*.msg", SearchOption.AllDirectories)。您可能打算将其放在catch块中。

千万里不及你

private IEnumerable<string> GetDirFiles(String location){&nbsp; &nbsp; IEnumerable<string> emailfiles = Enumerable.Empty<string>();&nbsp; &nbsp; try&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; //Search all directories for txt files&nbsp; &nbsp; &nbsp; &nbsp; emailfiles = Directory.EnumerateFiles(location, "*.txt", SearchOption.AllDirectories);&nbsp; &nbsp; }&nbsp; &nbsp; catch (Exception ex)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("Message for admins: " + ex.Message);&nbsp; &nbsp; }&nbsp; &nbsp; finally&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; textBox1.Clear();&nbsp; &nbsp; &nbsp; &nbsp; emailfiles = Directory.EnumerateFiles(location, "*.msg", SearchOption.AllDirectories);&nbsp; &nbsp; }&nbsp; &nbsp; return emailfiles;}您还忘记返回要返回的 IEnumerable 类型

Qyouu

只是不要使用 var。找出从 Directory.EnumerateFiles(可能是 System.Collections.Generic.IEnumerable)返回的类型。无论如何,这是您将电子邮件文件设置为的唯一类型。然后你可以像这样初始化它:(任何类型的)电子邮件文件;在 try 块之外。
打开App,查看更多内容
随时随地看视频慕课网APP