Expression<Func<T>>
또는 Func<T>
을 사전의 키로 사용하면 효과가 있습니까? 예를 들어 계산량이 많은 결과를 캐시하는 경우.C# : 표현식이나 함수를 사전의 키로 사용할 수 있습니까?
public static class Cache<T>
{
// Alternatively using Expression<Func<T>> instead
private static Dictionary<Func<T>, T> cache;
static Cache()
{
cache = new Dictionary<Func<T>, T>();
}
public static T GetResult(Func<T> f)
{
if (cache.ContainsKey(f))
return cache[f];
return cache[f] = f();
}
}
이도 작동합니다 : 예를 들어
, 광산의 different question에서 조금 내 아주 기본적인 캐시를 변경?
편집 : 빠른 테스트 후 실제로 작동하는 것처럼 보입니다. 하지만 흠 ... 지금 ... 그 그래도 일어나지 않을 것이다 있도록 변경하는 방법을 잘 반환 형식 당 하나의 캐시 것 때문에 아마, 더 일반적인 될 수 있다는 것을 발견
편집 2 : 누오, 잠깐 ... 사실은 그렇지 않습니다. 글쎄, 일반적인 방법을 위해. 하지만 람다는 아닙니다. 그들은 똑같이 보더라도 다양한 랜덤 메서드 이름을 얻습니다.), "다 잘 아
왜 그런가요? –
나는 그렇지 않다. 나는 다른 질문에 캐시 물건을 알아내는 동안 생각에 비틀 거리고 호기심이 생겼다. – Svish
조사 호기심에 대한 보너스 포인트이지만 실제로이 기술에 대한 실제 응용 프로그램을 볼 수는 없다. 반면에 효과가 있었다면 아이디어는 높은 쿨 팩터를가집니다. –