是否可以使用
extension methods返回
generic类型?
例如,我有以下方法:
// Convenience method to obtain a field within a row (as a double type) public static double GetDouble(this DataRow row,string field) { if (row != null && row.Table.Columns.Contains(field)) { object value = row[field]; if (value != null && value != DBNull.Value) return Convert.ToDouble(value); } return 0; }
目前使用如下:
double value = row.GetDouble("tangible-equity");
但我想使用以下代码:
double value = row.Get<double>("tangible-equity");
这是可能的,如果是这样,该方法会是什么样的?
解决方法
这个怎么样:
public static T Get<T>(this DataRow row,string field) where T: IConvertible { if (row != null && row.Table.Columns.Contains(field)) { object value = row[field]; if (value != null && value != DBNull.Value) return (T)Convert.ChangeType(value,typeof(T)); } return default(T); }
与仅仅进行转换相比,Convert.ChangeType处理转换更加灵活.这几乎反映了您的原始代码,只是通用的.