我有一个问题解决不了。
我从数据库中获得一个值。该值在数据库中保存为nvarchar
。
我需要了解值的类型。
例如:- 12.12.2012 ->日期时间
- 15:00 ->时间
- 67.45 -> Double
为了理解类型,我使用TryParse
方法。
示例来理解如果它是DateTime,我执行以下代码:
DateTime valueConverted;
if(DateTime.TryParse(input.ToString(), out valueConverted))
{
// IS DATETIME
}
问题是,如果从数据库得到的值是:
- 0900
- 009000
我想把它识别为字符串。问题是,转换为双精度类型成功,然后将值转换为value = 900的双精度类型。
如何识别像0900,00060这样的值不是double而是String
最简单的可能是匹配^0[0-9]+$
。
意识到这是一个不平凡的问题,你一定会发现你没有预料到的边缘情况。如果可能的话,我建议更改数据模型,或者在不同的列中存储不同的类型,或者使用单独的列表示存储的数据类型。
这似乎过于简化了,但根据您的描述,它将达到目的:
if (!string.IsNullOrEmpty(input) &&
input[0] == '0' &&
input.All(c => char.IsDigit(c)))
{
// We have a string.
}
可以使用regex-match
创建所有类型的数据类型格式字符串,并与regex匹配。
http://www.dotnetperls.com/regex-matchif (input.StartsWith("0"))
{
// string
}
else
{
// double
var number = double.Parse(input);
}