public static T SafeConvert<T>(string s) >>>{ >>> return SafeConvert(s, default(T)); >>>}>>>
>>foreach (KeyValuePair<String, String> kvp in rowValues) >> { >> String passedValue = kvp.Value.Trim(); >> var rowValue = bookingRow[kvp.Key]; >> Type columnType = ((DataColumn)bookingRow[kvp.Key]).DataType; >> >> var passedObject = Convert.ChangeType(passedValue, columnType); >> if (passedObject.Equals(rowValue) == false) >> { >> String rowValueString = rowValue.ToString().Trim(); >> if (rowValueString!=passedValue) // Double check to prevent cases of "" vs. " " >> this.SaveToBookingHistory(booking_id, "M", kvp.Key, rowValueString, passedValue, ref messageText, ref statusCode); >> } >> }>>
>/// <summary> > /// Safe convert into desired type > /// http://stackoverflow.com/questions/1106974/how-can-i-convert-to-a-specific-type-in-a-generic-version-of-tryparse?rq=1 > /// </summary> > /// <typeparam name="T"></typeparam> > /// <param name="s"></param> > /// <param name="defaultValue"></param> > /// <returns></returns> > public static T SafeConvert<T>(String s, T defaultValue) > { > if (String.IsNullOrEmpty(s)) > return defaultValue; > return (T)Convert.ChangeType(s, typeof(T)); > } > > public static T SafeConvert<T>(String s) > { > return SafeConvert(s, default(T)); > }>
foreach (KeyValuePair<String, String> kvp in rowValues) { String passedValue = kvp.Value.Trim(); var rowValue = bookingRow[kvp.Key]; Type columnType = ((DataColumn)bookingRow[kvp.Key]).DataType; var passedObject = Convert.ChangeType(passedValue, columnType); if (!StringEquals(passedValue, rowValue, columnType)) { this.SaveToBookingHistory(booking_id, "M", kvp.Key, rowValueString, passedValue, ref messageText, ref statusCode); } } public static bool StringEquals(string stringValue, object objectValue, Type objectType) { object convertedStringValue = GetDefault(objectType); if (!string.IsNullOrWhitespace(stringValue)) convertedStringValue = Convert.ChangeType(stringValue, objectType); return object.Equals(convertedStringValue, objectValue); } // See http://stackoverflow.com/questions/325426/programmatic-equivalent-of-defaulttype public static object GetDefault(Type type) { if(type.IsValueType) { return Activator.CreateInstance(type); } return null; }