title: Is there a much better way to create deep and shallow clones in C#?
body: <p>I have been creating object for a project and there are some instances that I have to create a deep copy for this objects I have come up with the use of a built in function for C# which is MemberwiseClone(). The problem that bothers me is whenever there is a new class that i created  , I would have to write a function like the code below for a shallow copy..Can someone please help me improve this part and give me a shallow copy that is  better than the second line of code. thanks :)</p>
  
  <p>SHALLOW COPY:</p>
  
  <pre><code>public static RoomType CreateTwin(RoomType roomType)
  {
      return (roomType.MemberwiseClone() as RoomType);
  }
  </code></pre>
  
  <p>DEEP COPY:</p>
  
  <pre><code>public static T CreateDeepClone&lt;T&gt;(T source)
  {
      if (!typeof(T).IsSerializable)
      {
          throw new ArgumentException("The type must be serializable.", "source");
      }
  
      if (Object.ReferenceEquals(source, null))
      {
          return default(T);
      }
  
      IFormatter formatter = new BinaryFormatter();
      Stream stream = new MemoryStream();
      using (stream)
      {
          formatter.Serialize(stream, source);
          stream.Seek(0, SeekOrigin.Begin);
          return (T)formatter.Deserialize(stream);
      }
  }
  </code></pre>