在object.IsNumeric()
根据Saul Dolgin对这个问题的回答编写自己的扩展方法时,我遇到了一个潜在的问题,OverflowException
如果使用double.MaxValue
或尝试将得到一个double.MinValue
。
我的“解决方案”是将Noldorin接受的答案与Saul Dolgin的答案相结合,并在尝试解析任何内容之前添加模式匹配开关(并使用C#7的优点来整理一下):
public static bool IsNumeric(this object obj)
{
if (obj == null) return false;
switch (obj)
{
case sbyte _: return true;
case byte _: return true;
case short _: return true;
case ushort _: return true;
case int _: return true;
case uint _: return true;
case long _: return true;
case ulong _: return true;
case float _: return true;
case double _: return true;
case decimal _: return true;
}
string s = Convert.ToString(obj, CultureInfo.InvariantCulture);
return double.TryParse(s, NumberStyles.Any, NumberFormatInfo.InvariantInfo, out double _);
}