从给定的字符串输入确定类型

时间:2010-10-26 06:10:24

标签: c# .net string .net-4.0 types

有没有办法从给定的字符串输入中检测出类型?

例如:

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 个答案:

答案 0 :(得分:7)

我很确定你必须从头开始写这个 - 部分是因为它将非常严格按照你的要求量身定做。即使是一个简单的问题,例如你给出的日期是12月7日还是7月12日,这里可以产生很大的不同......以及你的日期格式是否严格,你需要支持的数字格式等等。

我认为我从来没有遇到过类似的东西 - 说实话,这种猜测通常会让我感到紧张。即使您知道数据类型,也很难正确解析,更不用说当您猜测数据类型时:(

答案 1 :(得分:7)

你必须了解预期的类型。 如果你这样做,你可以使用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属性编写自己的类型转换器,并实现自己的转换器。