-3

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

除了一系列 TryParse 之外,还有其他方法可以做到这一点吗?

更新

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

ID; 公司; 平均工资;成立日期
123;微软; 2350.78; 01.02.1911
65;苹果; 2100.50; 1934 年 7 月 16 日

明显类型的人不是计算机,但如果你添加这个额外的行,最具体的列“Id”类型将是字符串。

4A;IBM;2800.0; 01.01.1923

这个想法可能类似于 Type inference
Haskell Type inference

4

2 回答 2

1

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

于 2013-06-21T08:44:16.937 回答
0

由于输入是 CSV 文件,因此应事先知道数据类型。即你已经知道 ID 是一个字符串,Company 是一个字符串,Avg Salary 是一个 double,Founding date 是一个日期,等等。

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

我有一堂课可能会有所帮助:

/// <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;
            }
        }
于 2013-06-21T09:25:57.643 回答