-3

我有一个我无法解决的问题。

我从数据库中得到一个值。数据库中的该值保存为nvarchar.

我需要了解值的类型。

例如:

  • 12.12.2012 -> 日期时间
  • 15:00 -> 时间
  • 67.45 -> 双倍

对于不了解的类型,我使用该TryParse方法。

了解它是否是 DateTime 的示例我执行此代码:

DateTime valueConverted;

if(DateTime.TryParse(input.ToString(), out valueConverted))
{
   // IS DATETIME
}

问题是,如果从数据库中得到的值是:

  • 0900
  • 009000

我希望将其识别为字符串。问题是转换为双精度值成功,然后将值转换为值 = 900 的双精度值。

我怎样才能认识到像 0900, 00060 这样的值不是 double 但是String

4

4 回答 4

2

最简单的可能是匹配^0[0-9]+$.

意识到这是一个不平凡的问题,你一定会发现你没有预料到的边缘情况。如果您有能力,我建议您更改数据模型,或者将不同的类型存储在不同的列中,或者有一个单独的列来表示存储的数据类型。将所有内容存储为字符串通常是一个坏主意。

于 2013-01-04T09:34:17.593 回答
0
if (input.StartsWith("0"))
{
    // string
}
else
{
    // double
    var number = double.Parse(input);
}
于 2013-01-04T11:10:40.853 回答
0

This seems massively oversimplified, but based on your description it will do the trick:

if (!string.IsNullOrEmpty(input) &&
    input[0] == '0' &&
    input.All(c => char.IsDigit(c)))
{
    // We have a string.
}
于 2013-01-04T09:36:53.273 回答
0

你可以使用正则表达式匹配

创建所有类型的数据类型格式字符串并与正则表达式匹配。

http://www.dotnetperls.com/regex-match

于 2013-01-04T10:54:59.860 回答