列表的通用类型

本文关键字:类型 string 列表 | 更新日期: 2023-09-27 18:19:15

我有一个字符串列表,想知道它们除了字符串之外是否共享任何预定义的c#类型,另外我想检查日期。

是否有一个现有的方法来做到这一点,而不是一个级联的TryParse的?

这些字符串的来源是一个excel csv文件,例如

Id;公司;平均工资;成立日期
123;微软;2350.78;01.02.1911
65;苹果;2100.50;16.07.1934

对于人来说是很明显的类型,而不是计算机,但是如果你增加了这一行,最具体的列Id类型将是字符串。

4

;IBM;2800.0;01.01.1923

这个想法可以是类似于类型推断的东西
Haskell类型推断

列表<string>的通用类型

您可以尝试使用Regex来查找是否可以将字符串转换为类型,这里有一些Regex示例http://www.regular-expressions.info/examples.html

由于输入是CSV文件,因此应该提前知道数据类型。也就是说,你已经知道ID是一个字符串,公司是一个字符串,平均工资是一个双值,成立日期是一个日期,等等。

您应该围绕规范编写代码,并在数据格式错误时优雅地处理用户错误。

我有一个类可能会有所帮助:

/// <summary>
        /// Translate a text value to its setting type
        /// </summary>
        /// <param name="type">Type to convert to</param>
        /// <param name="value">string to cast</param>
        /// <returns></returns>
        private static object CastHelper(Type type, string value)
        {
            switch (type.Name)
            {
                case "Int32":
                    return Convert.ToInt32(value);
                case "Byte":
                    return Convert.ToByte(value);
                case "Boolean":
                    return Convert.ToBoolean(value);
                case "Color":
                    {
                        try
                        {
                            string[] rgb = value.Split(',');
                            return Color.FromArgb(Convert.ToInt32(rgb[0]), Convert.ToInt32(rgb[1]), Convert.ToInt32(rgb[2]));
                        }
                        catch (Exception)
                        {
                            return Color.FromName(value);
                        }
                    }
                case "Font":
                    return (new FontConverter().ConvertFromString(value));
                default:
                    return value;
            }
        }