从格式字符串派生对象类型

时间:2014-07-17 09:15:18

标签: c# .net

是否可以从C#中的.NET格式字符串派生目标对象类型?例如:

//Input parameters
var formatString = "dd/MM/yyyy";  //or "£0.00" for example
var stringValue = "2014-04-01"; //or "37.34" for example

//Logic
object value = null;

if (IsADate(formatString)) {
    objectValue = DateTime.Parse(stringValue);

} else if (IsANumber(formatString)) {
    objectValue = double.Parse(stringValue);

} else //etc

//Result
var resultString = String.Format(value,formatString);

我显然可以写出IsADate()IsANumber()函数,但想知道框架中是否有任何内容可以涵盖这一点?

2 个答案:

答案 0 :(得分:3)

DateTime.TryParseExact()会让您成为IsDate()函数,而Int32.TryParse()会让您成为IsNumber()函数。

最后你应该有类似的东西:

DateTime dateTime ; 
int anInt;

if (DateTime.TryParseExact(formatString, stringValue , out dateTime)) {
    objectValue = DateTime.Parse(stringValue);

} else if (Int32.TryParse(stringValue , out anInt)) {
    objectValue = double.Parse(stringValue);

} else //etc

答案 1 :(得分:0)

您可以强制.NET尝试在给定格式字符串的情况下解析您的输入。如果成功,很有可能你得到了正确的类型:

var formatString = "dd/MM/yyyy";  //or "£0.00" for example
var stringValue = "2014-04-01"; //or "37.34" for example

//Logic
object value = null;
DateTime dtDummy;
int intDummy;

if (DateTime.TryParseExact(formatString, stringValue, out dtDummy)) {
    value = dtDummy;

} 
else
...

对于某些类型(例如数字类型),没有这样的方法。