列表的通用类型
本文关键字:类型 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类型推断
您可以尝试使用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;
}
}