C#疑问,找到数据类型(C# doubt, finding the datatype)

2019-09-26 10:07发布

我有以下变量:

string str1 = "1";
string str2 = "asd";
string str3 = "3.5";
string str4 = "a";

现在,我需要找到每个字符串即数据类型的数据类型,它可如果报价被删除转换。 以下是我想每个变量转换为:

STR1 - 整数
STR2 - 字符串
STR3 - 双
STR4 - 焦

注:如果字符串单个字符应该是char,虽然字符串可以有一个字母,我限制它。

供参考:这些值是从其中i手动输入值数据网格得到的。 所以,一切都成为一个字符串。 有没有办法做到这一点?

Answer 1:

如果你可以使用元数据

你有猜测的数据类型是什么,是不是一个好主意。

两件事情

1哪里数据是从哪里来的?

如果它是一个数据库,你确定他们是字符串? 如果它是一个数据库,应该有一些元数据返回的会告诉你什么字段的数据类型是。

如果它是一个XML文件,是有定义的架构,这将使你的类型?

2如果你还要继续猜。

要知道,你可以有这种情况发生是数字,但完全有效的字符串如电话号码,银行帐户数字的字符串,是最好的字符串表示。 此外,这些数字可以有很多的数字,如果你把它们转换成双打你可能会失去一些数字以浮点不准确(你应该确定多达14个或15位)

我敢肯定,现在 - 因为我已经把我的时间打字 - 有很多答案,告诉你如何做到这一点(即诠释的TryParse第一,然后双击,然后进行测试长度字符,如果不是那么它是一个字符串等),但如果我是你,我会试试看能不能做到这一点,看看是否有什么办法可以得到,或通过一些元数据,将告诉你它什么类型,而不仅仅是什么类型它可能



Answer 2:

当然,还有就是要做到这一点没有明确的办法,但如果你创建的数据类型的列表要检查按优先级排序,那么这样的事情可以做的伎俩。

object ParseString(string str)
{
    int intValue;
    double doubleValue;
    char charValue;
    bool boolValue;

    // Place checks higher if if-else statement to give higher priority to type.
    if (int.TryParse(str, out intValue))
        return intValue;
    else if (double.TryParse(str, out doubleValue))
        return doubleValue;
    else if (char.TryParse(str, out charValue))
        return charValue;
    else if (bool.TryParse(str, out boolValue))
        return boolValue;

    return null;
}

只需调用每个字符串这个功能,你应该有此时,相应类型的对象返回。 那么一个简单的类型检查可以告诉你的字符串是如何解析的。



Answer 3:

使用TryParse每种类型的方法。



Answer 4:

没有内置的方式做到这一点,你可以尝试的TryParse上的数字类型的精度提高,但也不能保证它是正确的。

什么是处理它就像你手动将您最好的选择。 即是否有小数的地方吗? 否 - 那么它的一个整数。 多大? 它是消极的?



Answer 5:

每个这些项目的数据类型为字符串。 如果你想尝试把它解析为不同的类型,您可以使用Int32.TryParse,Double.TryParse等或者你可以使用正则表达式:

bool isInt = new Regex(@"^\d+$").IsMatch(str);
bool isDouble = !(isInt) && new Regex(@"^\d+\.\d+$").IsMatch(str);
bool isChar = !(isInt || isDouble) && new Regex(@"^.$").IsMatch(str);
bool isString = !(isInt || isDouble || isChar);


文章来源: C# doubt, finding the datatype
标签: c# parsing types