Saving a contact and dealing with exceptions
You shouldn't use general catch, you should always catch only the exceptions that you actually want to catch.
Avoidable exceptions like index out of range or null reference should indicate an error in your code. Instead of handling them, you should make sure they never happen.


For your specific case, you could write an extension method that checks that the index isn't out of range and that the value isn't null (and returns empty string if it is).

Something like:

public static string GetAsStringOrEmpty(this object[] array, int index)
{
    if (array == null)
        throw new ArgumentNullException("array");

    if (index &gt;= 0 &amp;&amp; index &lt; array.Length)
    {
        string value = array[index] as string;

        if (value != null)
            return value;
    }

    return string.Empty;
}


You would then use it like this:

var array = dtdetails.Rows[0].ItemArray;
save.Firstname = array.GetAsStringOrEmpty(1);
save.LastName = array.GetAsStringOrEmpty(2);
…