public class Stock
{
}
class Program
{
static void Main(string[] args)
{
ObjectCache cache = MemoryCache.Default;
cache["test"] = new Stock();
var x = cache.OfType<Stock>().ToList();
}
}
这是空的...我认为OfType应该返回T类型集合中的所有实例?
只是为了排除ObjectCache作为可能的罪魁祸首我也试过
List<object> lstTest = new List<object>();
lstTest.Add(new Stock());
var y = lstTest.OfType<Stock>().ToList();
然而这很有用 - 所以看起来问题出现在ObjectCache上,它是下面一个Dictionary的实例
解
cache.Select(item => item.Value).OfType<T>().ToList()
谢谢阿列克谢!
答案 0 :(得分:5)
MemoryChache返回KeyValuePair<string,Object>
的枚举器,而不仅仅是值:MemoryChache.GetEnumerator()。
您需要相应地获取物品。类似的东西:
var y = cache.Select(item => item.Value).OfType<Stock>();
答案 1 :(得分:2)
这样可行
cache.GetValues(new string[] {"test"}).Values.OfType<Order>()
但我不认为你应该使用它。
缓存的工作方式类似于词典...因此您可以使用KeyValuePairs
GetValues
答案 2 :(得分:0)
呀。对不起自己。 ObjectCache是一个IEnumerable&gt; 不是一个IDictionary。
这有效:
var c = cache.Select(o => o.Value).OfType<Stock>().ToList();
答案 3 :(得分:0)
这对我有用。
公共类股票 { 公共股票() { 姓名=&#34;艾琳&#34 ;; } public string Name {get;组; } }class Program
{
static void Main(string[] args)
{
System.Collections.ArrayList fruits = new System.Collections.ArrayList(4);
fruits.Add("Mango");
fruits.Add("Orange");
fruits.Add("Apple");
fruits.Add(3.0);
fruits.Add("Banana");
fruits.Add(new Stock());
// Apply OfType() to the ArrayList.
var query1 = fruits.OfType<Stock>();
Console.WriteLine("Elements of type 'stock' are:");
foreach (var fruit in query1)
{
Console.WriteLine(fruit);
}
}
}
记住IEnumerable是懒惰评估的。使用foreach循环遍历query1,您将看到它只找到Stock对象。