Клонирование

Обычно при клонировании объекта в .NET, я просто использую BinaryFormatter, он будет автоматически выполняться глубокое копирование объекта. Но при написании кода на PCL мы не имеем возможности использовать BinaryFormatter и поэтому приходится искать другие варианты.

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

Поэтому, для решения этой задачи, я начал использовать JSON.Net. Итак, давайте посмотрим на то, как это может быть реализовано:

public static T Clone<T>(this T source)
{
	if (Object.ReferenceEquals(source, null))
	{
		return default(T);
	}

	// In the PCL we do not have the BinaryFormatter
	return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(source));
}

Теперь, когда мы должны клонировать объект, делаем это так.

var original = new NestedObject();

var clone = original.Clone();

Оригинал

Теги: перевод, c#, .net, pcl

Редактировать