1
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にあるようです。

解決

cache.Select(item => item.Value).OfType<T>().ToList()

アレクセイありがとう!

4

4 に答える 4

5

MemoryChacheは、値だけでなく、の列挙子を返しKeyValuePair<string,Object>ます:MemoryChache.GetEnumerator()

あなたはあなたのアイテムを手に入れるためにそれに応じてケースに入れる必要があります。何かのようなもの:

var y = cache.Select(item => item.Value).OfType<Stock>();
于 2012-08-22T01:18:06.793 に答える
2

これはうまくいくでしょう

cache.GetValues(new string[] {"test"}).Values.OfType<Order>()

しかし、私はあなたがこれを使うべきではないと思います。キャッシュは辞書のように機能するのでKeyValuePairsGetValues

于 2012-08-22T01:19:28.547 に答える
0

これは私のために働いた。

public class Stock {public Stock(){Name = "Erin"; } 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オブジェクトのみが検出されます。

于 2012-08-22T01:18:18.087 に答える
0

うん。申し訳ありません。ObjectCacheはIEnumerable>実際にはIDictionaryではありません。

これは機能します:

var c = cache.Select(o => o.Value).OfType<Stock>().ToList();
于 2012-08-22T01:13:49.857 に答える