为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
互换的青春 2021-11-14 15:59:45
我是一个新手,并试图重新回到编程游戏中。很抱歉我的无知和缺乏知识。我正在尝试查看如何修复下面代码中的返回类型错误消息。我知道我可以使用显式数据类型在 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 块中定义的。谢谢。
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

是的,您需要在块外声明 emailFiles,并且 novar将不起作用(没有一些体操)。

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

您唯一的其他选择是return从 try 和 catch 块开始,而不是在方法的末尾。

正如@AdamVincent 指出的那样,您遇到了更大的问题;这是因为一个finally块总是执行(无论异常或其缺乏)的返回值将始终实际上Directory.EnumerateFiles(location, "*.msg", SearchOption.AllDirectories)。您可能打算将其放在catch块中。


查看完整回答
反对 回复 2021-11-14
?
千万里不及你

TA贡献1784条经验 获得超9个赞

private IEnumerable<string> GetDirFiles(String location)

{

    IEnumerable<string> emailfiles = Enumerable.Empty<string>();

    try

    {

        //Search all directories for txt files

        emailfiles = Directory.EnumerateFiles(location, "*.txt", SearchOption.AllDirectories);

    }

    catch (Exception ex)

    {

        Console.WriteLine("Message for admins: " + ex.Message);

    }

    finally

    {

        textBox1.Clear();

        emailfiles = Directory.EnumerateFiles(location, "*.msg", SearchOption.AllDirectories);

    }


    return emailfiles;

}

您还忘记返回要返回的 IEnumerable 类型


查看完整回答
反对 回复 2021-11-14
?
Qyouu

TA贡献1786条经验 获得超11个赞

只是不要使用 var。找出从 Directory.EnumerateFiles(可能是 System.Collections.Generic.IEnumerable)返回的类型。无论如何,这是您将电子邮件文件设置为的唯一类型。然后你可以像这样初始化它:

(任何类型的)电子邮件文件;

在 try 块之外。


查看完整回答
反对 回复 2021-11-14
  • 3 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信