Can anyone suggest a single method which can return the value of a column in a datarow and automatically handle the possibility of the column value to be null. Essentially I was trying to come up with a generic solution taking advantage of the DataRow extension methods to handle DBNull values. My solution till now has been:
public static Nullable<T> SafeRead<T>(DataRow row, string fieldName) where T : struct
{
if (row.HasColumn(fieldName))
{
return row.Field<Nullable<T>>(fieldName) ?? default(Nullable<T>);
}
else
return default(Nullable<T>);
}
public static T SafeRead<T>(DataRow row, string fieldName) where T : class
{
if (row.HasColumn(fieldName))
{
return row.Field<T>(fieldName) ?? default(T);
}
else
return default(T);
}
But this obviously complains about method ambiguity since C# does not allow method overloading based on parameter contraints
The following will give you the value back from the datarow, or the default for the type if the value is DBNull.Value. If the field is not defined it will throw an ArgumentException.
And here are a few simple tests: