Google có sử dụng Expression<Func<T>>
hoặc Func<T>
làm khóa trong từ điển không? Ví dụ để cache kết quả tính toán nặng.C#: Có thể sử dụng các biểu thức hoặc chức năng như các phím trong từ điển không?
Ví dụ, thay đổi bộ nhớ cache rất cơ bản của tôi từ một different question của tôi một chút:
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();
}
}
có này thậm chí làm việc?
Chỉnh sửa: Sau khi kiểm tra nhanh, có vẻ như nó thực sự hoạt động. Nhưng tôi phát hiện ra rằng nó có thể có thể được chung chung hơn, vì nó bây giờ sẽ là một bộ nhớ cache mỗi kiểu trả ... không chắc chắn làm thế nào để thay đổi nó do đó sẽ không xảy ra mặc dù ... hmm
Sửa 2 : Không, chờ đã ... nó thực sự không. Vâng, đối với các phương pháp thường xuyên nó. Nhưng không phải cho lambdas. Họ nhận được nhiều tên phương thức ngẫu nhiên ngay cả khi chúng trông giống nhau. Oh cũng c",)
Tại sao bạn làm điều đó? –
Tôi không. Tôi đã vấp phải suy nghĩ trong khi tìm ra những thứ đệm trong câu hỏi khác của tôi và đã tò mò :) – Svish
Điểm thưởng cho tò mò điều tra, nhưng tôi không thể thực sự nhìn thấy bất kỳ ứng dụng thực sự cho kỹ thuật này. Mặt khác, ý tưởng này có một yếu tố rất mát nếu nó đã có thể làm việc. –