通过解析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文本文件,系统应该为每一列提出数据类型。

通过解析C#中的字符串数组来识别数据类型

我认为你能做的最好的事情就是从"最小的"到"<最大的>

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());
    }
}