我有以下变量:

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

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

str1-整数
str2串
str3-双
str4-char

注:如果有个字应当char,虽然有串可能有单一的字母,我限制。

供参考:这些价值观是从获得的数据表格在我手工输入的价值观。所以一切都变成一串。是否有任何方式做到这一点?

有帮助吗?

解决方案

使用元数据,如果可以

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

两件事

1数据来自哪里?

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

如果是Xml文件,是否有定义的模式可以为您提供类型?

2如果你不得不继续猜测。

请注意,您可以使用恰好是数字的字符串,但这些字符串是完全有效的字符串,例如电话号码,银行帐号,最好用字符串表示。 这些数字也可以有很多数字,如果你把它们转换成双打,你可能会丢失一些数字到浮点不准确(你应该可以达到14或15位数)

我现在肯定 - 因为我花了我的时间输入这个 - 有很多答案告诉你如何做到这一点(即首先是tryparse int,然后是double,然后测试char的长度,如果不是那么它是一个字符串等),但如果我是你,我会尝试不这样做,看看你是否有任何方法可以得到,或传递一些元数据,告诉你它的类型 IS 而不仅仅是可能的类型

其他提示

当然,没有明确的方式做到这一点,但如果创建了一个列表中的数据类型,你想要检查下令通过的优先权,那么这样的事情可以做的伎俩。

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

只是这个叫功能上的每个字符串,你应该有适当类型的对象返回。一个简单的类型检查后可以告诉你怎样串进行分析。

使用每种类型的 TryParse 方法。

没有内置的方法可以做到这一点,你可以在数字类型上尝试使用TryParse,但是它不能保证它是正确的。

最好的办法是像手动一样处理它。即是否有小数位?不 - 那么它是一个整数。多大?这是消极的吗?

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

bool isInt = new Regex(@"^\d+<*>quot;).IsMatch(str);
bool isDouble = !(isInt) && new Regex(@"^\d+\.\d+<*>quot;).IsMatch(str);
bool isChar = !(isInt || isDouble) && new Regex(@"^.<*>quot;).IsMatch(str);
bool isString = !(isInt || isDouble || isChar);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top