Определить тип по заданному вводу строки - PullRequest
2 голосов
/ 26 октября 2010

Есть ли способ определить тип по заданному строковому вводу?

Например:

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.

Должен ли я написать это с нуля?
Просто хотел проверить, знает ли кто-нибудь о лучшем способе, прежде чем я это сделаю.

Спасибо!

Ответы [ 2 ]

7 голосов
/ 26 октября 2010

Вы должны узнать кое-что об ожидаемом типе.Если вы это сделаете, вы можете использовать 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 в своем классе и реализуя собственный преобразователь.

7 голосов
/ 26 октября 2010

Я почти уверен, что вам придется написать это с нуля - отчасти потому, что он будет очень строго соответствовать вашим требованиям. Даже такой простой вопрос, как, например, дата, которую вы указали, 7 декабря или 12 июля, может иметь большое значение ... и строгие форматы дат, какие числовые форматы вам нужно поддерживать и т. Д.

Я не думаю, что когда-либо сталкивался с чем-то подобным - и, честно говоря, такого рода догадки обычно заставляют меня нервничать. Может быть трудно правильно выполнить синтаксический анализ, даже если вы знаете тип данных, не говоря уже о том, чтобы угадать тип данных для начала: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...