已知为盒装ValueType时,无需编写类型特定的克隆代码,是否可以克隆对象?
一些参考代码
List<ValueType> values = new List<ValueType> {3, DateTime.Now, 23.4M};
DuplicateLastItem(values);
我遇到的一个特殊问题是基于价值栈的虚拟指令机。 (而且我也懒得写typeof(int)typeof(DateTime)...。)
update我认为我(和其他一些人)感到困惑。我有可行的解决方案;
List<ValueType> values = new List<ValueType> { 3, DateTime.Now, 23.4M };
// Clone
values.Add(values[values.Count() - 1]);
// Overwrite original
values[2] = 'p';
foreach (ValueType val in values)
Console.WriteLine(val.ToString());
我不知道,如果我完全误解了这个问题。您是否正在尝试这样做?
根据定义,每个值类型的分配都是一个克隆。
您可以使用Convert.ChangeType
使用黑客:
为什么您仍然需要克隆代码?值类型应该
private static T CloneUnboxed<T>(object o) where T : struct
{
return (T)o;
}
private static object CloneBoxed<T>(object o) where T : struct
{
return (object)(T)o;
}
如果将对象转换为ValueType,那不会导致克隆吗?然后可以重新装箱:
回答标题而不是意图(如果有人发现此问题),是的,通过RuntimeHelpers.GetObjectValue