来自doc
添加(CacheItem,CacheItemPolicy):在派生类中重写时,尝试将缓存条目作为CacheItem实例插入缓存中,并添加有关如何该条目应被驱逐。 [1]
-
Set(CacheItem,CacheItemPolicy):在派生类中重写时,将缓存条目作为CacheItem实例插入缓存中,指定有关如何逐出该条目的信息。 [2]
我看到措辞上没什么区别(尝试)和签名(set
是一个子,add
返回一个布尔值),但我不确定哪个一个我应该使用的,如果两者之间确实存在不同的东西。
答案 0 :(得分:31)
主要区别在于Add()
方法尝试插入缓存而不覆盖具有相同密钥的现有缓存条目。
虽然Set()
方法将覆盖具有相同密钥的现有缓存条目。 [但是,如果项目的密钥不存在,则插入将作为新的缓存条目进行]。
以上是其功能方面的差异。
语法差异:
一个重要的语法差异是Add()
方法返回一个布尔值,如果插入成功则为true
,如果缓存中已存在具有相同键的条目,则为false
作为项目。
Set()
方法具有void
返回类型。
最后一点,Add()
方法的内部实现实际上调用了相应版本的AddOrGetExisting()
方法。
public virtual bool Add(CacheItem item, CacheItemPolicy policy)
{
return this.AddOrGetExisting(item, policy) == null;
}