Действительно ли возможно клонировать ValueType?

Считайте код других (хороших) приложений JavaScript и посмотрите, как они обрабатывают вещи. Но я начинаю с файлом в классе. Но однажды его готовое к производству, я объединил бы файлы в один большой файл и уменьшил бы.

единственная причина, я не объединил бы файлы, то, если мне не были нужны все файлы на всех страницах.

10
задан abatishchev 6 June 2010 в 20:06
поделиться

6 ответов

Не знаю, правильно ли я понял вопрос.
Вы пытаетесь это сделать?

public static void Main()
{
    List<ValueType> values = new List<ValueType> {3, DateTime.Now, 23.4M};
    DuplicateLastItem(values);

    Console.WriteLine(values[2]);
    Console.WriteLine(values[3]);
    values[3] = 20;
    Console.WriteLine(values[2]);
    Console.WriteLine(values[3]);
}

static void DuplicateLastItem(List<ValueType> values2)
{
    values2.Add(values2[values2.Count - 1]);
}
3
ответ дан 3 December 2019 в 21:21
поделиться

Каждое присвоение типа значения является по определению клоном.

Изменить:

При упаковке типа значения копия вашего типа значения будет содержаться в экземпляре ReferenceType.

В зависимости от метода клонирования я не предвижу никаких различий.

5
ответ дан 3 December 2019 в 21:21
поделиться

You can use a hack using Convert.ChangeType:

object x = 1;
var type = x.GetType();
var clone = Convert.ChangeType(x, type);

// Make sure it works
Assert.AreNotSame(x, clone);

The result is copy of the value boxed in new object.

4
ответ дан 3 December 2019 в 21:21
поделиться

Зачем вам вообще нужен код клонирования? Типы значений должны обычно быть неизменными в любом случае, и бокс не меняет этого. Следовательно, хорошо продуманный тип значения не требует клонирования.

2
ответ дан 3 December 2019 в 21:21
поделиться
    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;
    }

Although I do question the need for either, given that a value type ought to be immutable.

2
ответ дан 3 December 2019 в 21:21
поделиться

If you were to cast the object to ValueType, would that not cause a clone to be made? This could then be reboxed:

int i = 3;
object b = i; // box it
ValueType c = (ValueType) b; // unbox it
object d = c; // box it, effectively creating a clone

So, I think I would say an effective clone methodology would be:

object clone = (ValueType) boxed;
1
ответ дан 3 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: