2010-10-26 60 views
1

有什么方法来检测从给定的字符串输入的类型?确定从给定的字符串输入型

如:

string input = "07/12/1999"; 

string DetectType(s) { .... } 

Type t = DetectType(input); // which would return me the matched datatype. i.e. "DateTime" in this case. 

我将不得不从头开始写这个?
只是想检查是否有人有更好的办法知道之前,我去了。

谢谢!

+0

你需要写你自己....让我想知道你为什么需要那个...... – 2010-10-26 06:19:49

回答

7

我敢肯定,你必须从头开始编写 - 部分原因是它将严格按照您的要求量身定制。即使如是否你给的日期一个简单的问题是,12月7日或7月12日可在这里做一个很大的区别...和你的日期格式是否严格,你需要支持等

我什么数字格式不要以为我曾经遇到类似的事情 - 说实话,这种猜测通常会让我感到紧张。即使当你知道数据类型时,也很难得到解析,更不用说当你猜测数据类型时开始:(

+3

这是Jon Skeet爵士的说话。 – yonan2236 2010-10-26 07:12:27

+0

嗯,我不得不同意..在我出发之前只是保持警惕。我想现在我必须。谢谢! – 2010-10-26 08:04:16

+0

我打赌你的单元测试和测试数据(你将SOOOOO需要有)会比方法的代码本身长10倍倍笑:) – MattC 2010-10-26 09:07:04

6

你必须知道预期类型 如果你这样做你可以使用的TypeConverter如:

public object DetectType(string stringValue) 
    { 
     var expectedTypes = new List<Type> {typeof (DateTime), typeof (int)}; 
     foreach (var type in expectedTypes) 
     { 
      TypeConverter converter = TypeDescriptor.GetConverter(type); 
      if (converter.CanConvertFrom(typeof(string))) 
      { 
       try 
       { 
        // You'll have to think about localization here 
        object newValue = converter.ConvertFromInvariantString(stringValue); 
        if (newValue != null) 
        { 
         return newValue; 
        } 
       } 
       catch 
       { 
        // Can't convert given string to this type 
        continue; 
       } 

      } 
     } 

     return null; 
    } 

大多数系统类型都有自己的类型转换器,你可以使用你的类的TypeConverter属性,并实现自己的转换器编写自己的

+0

再次,感谢我没有部分最终会使用你的建议。 – 2010-11-15 05:34:26