是否可以从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()
函数,但想知道框架中是否有任何内容可以涵盖这一点?
答案 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
...
对于某些类型(例如数字类型),没有这样的方法。