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; >} >Rob,
var passedObject = Convert.ChangeType(passedValue, columnType);
If the passed value is empty string and I need to convert to integer, it returns an exception.