我有以下擴展功能:如何使用yield返回空集合?
public static IEnumerable<T> Select<T>(this IDataReader reader,
Func<IDataReader, T> selector)
{
while (reader.Read())
{
yield return selector(reader);
}
}
正在使用,如:
var readFields = dsReader.Select(r =>
{
var serviceResponse = myService.Decrypt<DateTime>(r.GetString(DATE_VALUE), r.GetInt32(DEK_ID));
if (serviceResponse.IsSuccessful)
{
return new DataField<DateFieldValue>
{
FieldValue = new DateFieldValue { Data = serviceResponse.Value }
};
}
return null;
});
if (!readFields.IsCollectionNullOrEmpty())
returnFinalFields.AddRange(readFields);
我這裏面臨的是,即使是serviceResponse.IsSuccessful假閱讀字段不爲空,它包含的問題具有null的項目的枚舉。有沒有辦法可以在這裏返回一個空集合?
'Enumerable.Empty();' –
有沒有一種方法)的reader.Read前檢查(見如果有數據,並在進入之前返回null? – Neil
@Neil從預期的'IEnumerable'返回null幾乎總是反模式。 –