Я пытаюсь получить перечисляемую коллекцию из массива, содержащего словарь. Или я должен сказать, я пытаюсь написать метод расширения для своих объектов словаря, которые хранят массивы для возврата элемента IEnumerable, когда результат равен нулю.
Я использую словари для хранения массивов данных (для этого есть причины скорости), которые я извлекаю в определенных точках поиска. извлеченные данные используются в запросах Linq, соединениях и т. д., но у меня возникают проблемы, когда набор данных не существует.
Возврат пустого набора строк (0 штук) решит мою проблему. то, что у меня есть до сих пор, это (упрощенный код, конечно)
public class Supplier
{
public string ID {get;set}
public string Name {get;set}
}
private sups[] = new Supplier[10];
Dictionary<int,Supplier[]> dic = new Dictionary<int, Supplier[]>();
dic.Add(1,sups[]);
public static IEnumerable<Supplier> TryGetValue<Tkey>(this IDictionary<Tkey, Supplier[]> source, Tkey ItemKey)
{
Supplier[] foundList;
IEnumerable<Supplier> retVal;
if (source.TryGetValue(ItemKey, out foundList))
{
retVal = foundList.AsEnumerable();
}
else
{
retVal = new Supplier[0].AsEnumerable();
}
return retVal;
}
// позже в коде есть что-то вроде:
dic.TryGetValue(1).Count()
//or a linq join
from a in anothertable
join d in dic.TryGetValue(1) on a.ID equals d.ID
То, что я пытаюсь достичь, - это общий метод расширения, как показано ниже:
public static IEnumerable<T> TryGetValue<Tkey,TValue>(this IDictionary<Tkey, TValue> source, Tkey ItemKey)
{
// same code...
// returning retVal = new T[0].AsEnumerable();
}
Я продолжаю приближаться, но никогда не достигаю цели .... Я хотел бы, чтобы параметры метода расширения были простыми. Это прохождение T, которое продолжает меня ловить.
Если кто-то может помочь, пришлите мне свой отзыв.
Спасибо заранее!