在catch块中返回空List
本文关键字:List 返回 catch | 更新日期: 2023-09-27 17:57:49
我有一个c#函数,它从Datatable中读取文件位置,并向调用方法返回一个包含所有文件lcoation的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
}
}
如果有人还在看。。。
使用IEnumerable<string>
作为返回类型并且:
return Enumerable.Empty<string>();
更改此行:
return new List<string>emptyList(); // cannot compile
至:
return new List<string>();
传递一个列表作为引用,并从函数中返回一个布尔值,这是个坏主意。您的方法名为getEmailAttachments
,它加载附件,并且应该返回附件。如果你想检查加载附件的结果,我可以建议你返回null
并检查返回的值。
我会采取稍微不同的方法。我会返回一个空列表,但也会将初始容量设置为零!
像这样:
return new List<string>(0);//notice the initial capacity to zero.
原因是内存消耗和优化。。。我知道这是一个微观优化,但它不会伤害任何东西。它实际上可能有利于整个应用程序。
使用
return new List<string>();
自.Net Framework 4.6前后和Core.Net版本中,添加了一种更好的方法
return Array.Empty<T>();
这会分配一个数组(它是一个IList),并将其重新用于该类型的空数组的所有后续请求。它又快又干净。
试试这个。。
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;
}
怎么样
allAttachments.Clear();
return allAttachments;