【发布时间】:2011-01-19 01:18:10
【问题描述】:
我有一个通用方法,用于将数据库中的字符串值转换为实际转换值。
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设为通用,我真的看不到任何方法。 -
我想我可以编写一个动作并存储它......但我敢打赌,调用它比拆箱更昂贵
-
您发布的代码不一定显示任何(取消)装箱。您能否提供更多上下文(和代码)来显示包含类中发生了什么?
-
@LukeH ... 添加了缺失的变量。
-
这段代码对我来说没有任何意义。 “rawVal”从何而来? DoSomethingExpensive 如何知道它应该为某个任意 T 返回一个 T?
标签: c# generics boxing memoization