C#中两个字符串值的数据类型的等式比较

时间:2011-01-24 07:44:13

标签: c# comparison types equality

这是我的一个奇怪的要求。我知道即使我的问题也很混乱。这是我想知道的。

我有两个字符串变量。我需要对字符串变量中的基础值的数据类型进行相等比较。对于前。

string firstVariable = "123"; // It contains integer value. i.e. I can convert it to integer value
string secondVariable = "string" // It contains string value.

现在我需要比较这两个字符串的基础值的数据类型是否相同。我怎么能这样做?

更新:感谢大家的澄清和解答。如果我知道一个变量的类型怎么样? 例如:

int firstVariable;
string secondVariable = "123". 

是否可以检查第一个变量的类型是否等于secondVariable的转换值。当我将firstVariable声明为int时,并不意味着它总是int类型。我的意思是,我知道一个变量的类型和其他变量是字符串,我想要比较firstvariable的数据类型和secondVariable的value数据类型的相等性。

Convert.ChangeType在上述情况下是否有帮助?

我知道这是一个愚蠢的问题,但出于对语言特征探索的好奇,我想知道这一点。

4 个答案:

答案 0 :(得分:4)

没有“基础数据类型”这样的东西。

谁说“123”不仅仅是包含数字1,2和3的字符串?将值转换为字符串后,有关您从转换的值的任何信息(包括其类型)都将丢失。

答案 1 :(得分:1)

从我的脑袋写下,所以可能会有错误:

class StringTypeEqualityComparer : IEqualityComparer<string, string>
{
    public bool Equals(string x, string y)
    {
        int tempInt;
        if (Int32.TryParse(x, out tempInt) && (Int32.TryParse(y, out tempInt))
            return true;

        bool tempBool;
        if (Boolean.TryParse(x, out tempBool) && Boolean.TryParse(y, out tempBool))
            return true;

        float tempFloat;
        if (Single.TryParse(x, out tempFloat) && Single.TryParse(y, out tempFloat))
            return true;

        // And whatever other types you want to compare...

        return false;

        // But what if two regular strings should also evaluate to equal?
    }
}

答案 2 :(得分:0)

为什么需要通过基础数据类型来比较它们?只需将它们比作字符串。或者如果你有另一个变量作为字符串,只需通过调用ToString()将其转换为字符串,并在字符串级别进行比较。

答案 3 :(得分:0)

要做到这一点,你必须有一个有限的可能数据类型列表,并确保你的字符串内容的类型不明确。然后,对于每种类型,您可以尝试将字符串转换为它,这样您就可以找到它实际上是什么类型。