是否可以克隆ValueType?

问题描述 投票:10回答:7

已知为盒装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());
c# reflection clr value-type
7个回答
3
投票

我不知道,如果我完全误解了这个问题。您是否正在尝试这样做?


5
投票

根据定义,每个值类型的分配都是一个克隆。


4
投票

您可以使用Convert.ChangeType使用黑客:


2
投票

为什么您仍然需要克隆代码?值类型应该


2
投票
    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;
    }

1
投票

如果将对象转换为ValueType,那不会导致克隆吗?然后可以重新装箱:


0
投票

回答标题而不是意图(如果有人发现此问题),是的,通过RuntimeHelpers.GetObjectValue

© www.soinside.com 2019 - 2024. All rights reserved.