| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | using System;using System.IO;namespace Google.ProtocolBuffers.Examples.AddressBook{    internal class SampleUsage    {        private static void Main()        {            byte[] bytes;            //Create a builder to start building a message            Person.Builder newContact = Person.CreateBuilder();            //Set the primitive properties            newContact.SetId(1)                .SetName("Foo")                .SetEmail("foo@bar");            //Now add an item to a list (repeating) field            newContact.AddPhone(                //Create the child message inline                Person.Types.PhoneNumber.CreateBuilder().SetNumber("555-1212").Build()                );            //Now build the final message:            Person person = newContact.Build();            //The builder is no longer valid (at least not now, scheduled for 2.4):            newContact = null;            using (MemoryStream stream = new MemoryStream())            {                //Save the person to a stream                person.WriteTo(stream);                bytes = stream.ToArray();            }            //Create another builder, merge the byte[], and build the message:            Person copy = Person.CreateBuilder().MergeFrom(bytes).Build();            //A more streamlined approach might look like this:            bytes = AddressBook.CreateBuilder().AddPerson(copy).Build().ToByteArray();            //And read the address book back again            AddressBook restored = AddressBook.CreateBuilder().MergeFrom(bytes).Build();            //The message performs a deep-comparison on equality:            if (restored.PersonCount != 1 || !person.Equals(restored.PersonList[0]))                throw new ApplicationException("There is a bad person in here!");        }    }}
 |