在catch块中返回空列表

时间:2014-04-11 09:01:57

标签: c# .net return-value return-type

我有一个c#函数从Datatable读取文件位置,并返回一个包含所有文件lcoations的List到调用方法。

Catch块中,我想返回一个带有false的空列表,因此调用方法可以取消它的操作。

但是我无法编译我的return语句。

将列表作为引用传入并让函数返回布尔值true/false会更好吗?

这是我正在尝试的代码:

   public static List<string> getEmailAttachments(string emailID, System.Data.DataTable emails)
    {
        List<string> allAttachments;

        //System.Data.DataTable oTbl = new DataTable();
        try
        {
            System.Diagnostics.Debugger.Break();

            var results = from myRow in emails.AsEnumerable()
                          where myRow.Field<string>("itemID") == emailID
                          select myRow;

            System.Diagnostics.Debug.Print("attachments");
            foreach (DataRow myRow in results)
            {
                System.Diagnostics.Debug.Print(myRow.Field<string>("attachmentsPath"));
                allAttachments.Add(myRow.Field<string>("attachmentsPath"));

                //DataTable dt = (DataTable)myRow["attachmentsPath"];
                //DataTable oTbl = dt.Clone();

                //DataRow[] orderRows = dt.Select("CustomerID = 2");

                //foreach (DataRow dr in orderRows)
                //{
                //    oTbl.ImportRow(dr);
                //}
                // myTable.ImportRow(dr);
                //oTbl.Rows.Add(myRow);
                //oTbl.ImportRow(myRow);
            }

            return allAttachments;
        }
        catch (Exception ex)
        {
            logBuilder("common.getEmailAttachments", "Exception", "", ex.Message, "");

            return new List<string>emptyList(); // cannot compile
        }
    }

6 个答案:

答案 0 :(得分:7)

如果有人还在寻找...

使用IEnumerable<string>作为返回类型,并:

return Enumerable.Empty<string>();

答案 1 :(得分:6)

更改此行:

return new List<string>emptyList(); // cannot compile

为:

 return new List<string>();

传递一个列表作为参考,并从函数返回一个布尔值,这是一个坏主意。您的方法称为getEmailAttachments,它是加载附件,它应该返回附件。如果您想检查加载附件的结果,我建议您返回null并检查返回的值。

答案 2 :(得分:3)

使用

 return new List<string>();

答案 3 :(得分:2)

试试这个..

public static List<string> getEmailAttachments(string emailID, System.Data.DataTable emails)
    {
        List<string> allAttachments;

        //System.Data.DataTable oTbl = new DataTable();
        try
        {
            System.Diagnostics.Debugger.Break();

            var results = from myRow in emails.AsEnumerable()
                          where myRow.Field<string>("itemID") == emailID
                          select myRow;

            System.Diagnostics.Debug.Print("attachments");
            foreach (DataRow myRow in results)
            {
                System.Diagnostics.Debug.Print(myRow.Field<string>("attachmentsPath"));
                allAttachments.Add(myRow.Field<string>("attachmentsPath"));

                //DataTable dt = (DataTable)myRow["attachmentsPath"];
                //DataTable oTbl = dt.Clone();

                //DataRow[] orderRows = dt.Select("CustomerID = 2");

                //foreach (DataRow dr in orderRows)
                //{
                //    oTbl.ImportRow(dr);
                //}
                // myTable.ImportRow(dr);
                //oTbl.Rows.Add(myRow);
                //oTbl.ImportRow(myRow);
            }

            //return allAttachments;
        }
        catch (Exception ex)
        {
            logBuilder("common.getEmailAttachments", "Exception", "", ex.Message, "");

            allAttachments= new List<string>();
        }
        return allAttachments;
    }

答案 4 :(得分:1)

我会采取略有不同的方法。 我将返回一个空列表,但也将初始容量设置为零!

赞:

return new List<string>(0);//notice the initial capacity to zero.

原因是内存消耗和优化...我知道这是一个微优化,但不会造成任何伤害。它实际上可能会使整个应用程序受益。

答案 5 :(得分:0)

怎么样

allAttachments.Clear();

return allAttachments;