Я не знаю, есть ли более декларативный метод, но вы можете легко кэшировать результат в обычном кэше и проверить, является ли аргумент нулевым, как это:
public SomeClass MyMethod(MyClass whatever)
{
if(whatever == null)
{
SomeClass result = Cache["MyMethodCache"] as SomeClass;
if(result != null)
return result;
}
//do something...
if(whatever == null)
{
Cache.Add("MyMethodCache",something, ... ); //duration, expiration policy, etc.
}
return something;
}
Однако эта версия должнасериализовать результат каждый раз, даже если он получен через кеш.