2010-10-26 58 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