考虑下面这个例程,它通过内置一些默认行为(例如:没有空值,不将“1,1,1”解析为有效数字)来简化我的生活:
public static Double CvtToDouble(Object O)
{
if (O == null) return (Double)0;
if (O == System.DBNull) return (Double)0;
if (O is string) return Double.Parse((String)O,
System.Globalization.NumberStyles.Float);
return (T)O;
}
然后,这个例程将为所有 num 类型重复执行。我希望通过将它们合并来节省打字和减少错别字。
public static T CvtTo<T>(Object O) : where T : "is one of Int32, Int16 ..."
通常的“where T: struct”约束在这里是不够的,因为“return (T)0”语句对于任意值类型都无效。似乎应该有一种方法可以泛型化,而不必倒过来,但我没有看到。我错过了什么?