保持緩存結果在字典<謂詞<美孚>列表<美孚>>是尷尬的我,因爲我想要的ASP.NET緩存處理期滿爲我而不是永遠緩存所有的結果,但它是一個,否則好的解決方案我想我最終會用Will的字典<判斷< Foo>,string>來緩存我可以在ASP.NET緩存鍵中使用的字符串。
一些初步測試表明,委託相等並不像其他人說的那樣「正確」,但Delegate.GetHashCode在病理上是無益的。反射器揭示
public override int GetHashCode()
{
return base.GetType().GetHashCode();
}
所以任何Predicate < Foo>返回相同的結果。
我剩下的問題是平等對匿名代表如何工作。那麼「同一個方法在同一個目標上調用」是什麼意思呢?似乎只要代表在同一地點定義,參考資料是平等的。在不同地方定義相同主體的代表不是。
static Predicate<int> Test()
{
Predicate<int> test = delegate(int i) { return false; };
return test;
}
static void Main()
{
Predicate<int> test1 = Test();
Predicate<int> test2 = Test();
Console.WriteLine(test1.Equals(test2)); // True
test1 = delegate(int i) { return false; };
test2 = delegate(int i) { return false; };
Console.WriteLine(test1.Equals(test2)); // False
}
這應該是我的需要。具有預定義謂詞的調用將被緩存。通過匿名方法調用FindAll的一個方法的多次調用應該獲得緩存結果。兩個調用FindAll的方法與顯然相同的匿名方法不會共享緩存的結果,但這應該相當少見。
我已在下面回答以及一些委託測試。等式。我可能會在星期一添加更多,當我嘗試將這些想法用於真實時。 – stevemegson 2008-10-18 13:25:37