通过解析C#中的字符串数组来识别数据类型
本文关键字:数组 字符串 识别 数据类型 | 更新日期: 2023-09-27 18:26:55
有没有一个库可以帮助识别给定字符串数组中的数据类型,例如
{"1.0", "2.0", "3.0"} ==> float, double, decimal (I do not care as long it is a real number)
{"1.0", "AB", "A"} ==> string
{1, 2, 3, 4} ==> Int32
{1.0, 2.5, 1, 2, 3} ==> float/double/decimal
识别给定类型的最小表示,例如float而不是double或short而不是int,是一种优势,但不是必要的。
一些需要识别的附加数据类型:DateTime(可能有几种格式),+/-符号作为前缀或后缀,小数点表示为点或逗号,等等。
我需要创建一个类似于Excel导入向导的功能,在导入时我有一个csv文本文件,系统应该为每一列提出数据类型。
我认为你能做的最好的事情就是从"最小的"到"<最大的>
最大的>void SetColumnType(string inputString)
{
bool boolValue;
short shortValue;
int intValue;
float floatValue;
if (bool.TryParse(inputString, out boolValue))
{
// set that column type or whatever to int
}
else if (short.TryParse(inputString, out shortValue))
{
// ... to short
}
else if (int.TryParse(inputString, out intValue))
{
// ... to int
}
else if (float.TryParse(inputString, out floatValue))
{
// ... to float
}
// ... etc.
}
IList<object> dataTypeArr = new List<object>
{
1.0,
"AB",
"A",
DateTime.Now
};
var typeList2 = new List<object>();
foreach (var item in dataTypeArr)
{
typeList2.Add(item.GetType());
}
如果您想将IList保持为字符串,那么您可以在foreach循环中编写自己的代码来检查if项。包含(".")如果是,请将其转换为十进制或双精度,然后将其添加到typeList2 List
如果你想处理字符串类型,然后转换它是否包含.
,你可以执行以下
IList<object> dataTypeArr = new List<object>
{
"1.0",
"AB",
"A",
DateTime.Now
};
var typeList2 = new List<object>();
foreach (var item in dataTypeArr)
{
var doubleType = item;
if (item.ToString().Contains("."))
{
doubleType = Convert.ToDouble(item);
typeList2.Add(doubleType.GetType());
}
else
{
typeList2.Add(item.GetType());
}
}