下面的代码为token.ExpiresOn
抛出参数null异常,因为令牌不在缓存和null
中。有没有办法在IF
子句中检查两者-令牌不在缓存中加上令牌现在到期时间小于utc?
if (!_cache.TryGetValue("KEY", out TokenClass token) && token.ExpiresOn < DateTimeOffset.UtcNow)
{
}
您确实想检查令牌是否不在缓存中或是否已过期。所以只需使用||
:
if (!_cache.TryGetValue("KEY", out TokenClass token) || token.ExpiresOn < DateTimeOffset.UtcNow)
{
// presumably, get a new token
}
这是因为||
短路:如果左侧部分的求值结果为true
,则右侧部分不会求值(该代码不会运行(。因此,如果您的令牌不在缓存中,则无需检查它是否已过期(这很好,因为这样您就会抛出(。