我有一个字符串列表,想知道他们是否共享除字符串以外的任何预定义的C#类型,另外我想检查日期。
除了TryParse的级联之外,还有现成的方法吗?
更新
这些字符串的来源是excel csv文件,例如
标识;公司;平均工资;创始日期
123;微软; 2350.78; 1911年2月1日
65;苹果; 2100.50; 1934年7月16日
对于不适用于计算机的人来说,显而易见的类型,但如果添加此附加行,则“Id”列的最具体类型将为字符串。
4A; IBM; 2800.0; 1923年1月1日
这个想法可能类似于类型推断 Haskell Type inference
答案 0 :(得分:1)
您可以尝试使用Regex查找字符串是否可以转换为类型,以下是一些正则表达式示例http://www.regular-expressions.info/examples.html
答案 1 :(得分:0)
由于输入是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;
}
}