我有一个通用方法,用于内存数据库中字符串值到实际转换值的转换。
public MySpecialValue {
object val;
bool valSet = false;
T GetValue<T> () {
if (!valSet)
{
val = (T)Convert.ChangeType(DatabaseValue, typeof(T));
valSet = true;
}
return (T)val;
}
public string DatabaseValue { get; set; }
}
问题是在初始化期间我不知道数据库中的数据是什么类型,只有在第一次调用时我才能做出这个决定。
有没有什么方法可以构造它,使其不会被迫拆箱缓存的值类型? (不改变包含类的签名)
最佳答案
您提供的代码有些奇怪。 “DoSomethingExpensive”如何知道为任意 T 返回 T ?这对我来说毫无意义。
您通常编写通用内存器的方式是这样的:
public static Func<T> Memoize(this Func<T> func)
{
bool executed = false;
T result = default(T);
Func<T> memoized = ()=>
{
if (!executed)
{
result = func();
executed = true;
}
return result;
};
return memoized;
}
现在你可以说:
Func<int> expensive = DoSomethingExpensiveThatGetsAnInt;
Func<int> memoized = expensive.Memoize();
你就完成了。无需装箱。
关于c# - 你能避免在内存通用方法中拆箱吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4730838/