Сравнение равенства типа данных значения двух строк в C # - PullRequest
0 голосов
/ 24 января 2011

Это странное требование, которое у меня есть. Я знаю, что даже мой вопрос довольно запутанный. Вот что я хочу знать.

У меня есть две строковые переменные. Мне нужно сделать сравнение равенства типа данных базового значения в строковых переменных. Например,

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.

Convert.ChangeType поможет в любом случае в приведенном выше сценарии?

Я знаю, что это глупый вопрос, но из любопытства в изучении языковых возможностей я хотел это знать.

Ответы [ 4 ]

4 голосов
/ 24 января 2011

Нет такого понятия, как "базовый тип данных".

Кто скажет, что "123" - это не просто строка, содержащая цифры 1, 2 и 3?После того, как вы преобразовали значение в строку, любая информация о преобразованном вами значении из , включая его тип, будет потеряна.

1 голос
/ 24 января 2011

Написано из моей головы, поэтому возможны (будут) ошибки:

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?
    }
}
0 голосов
/ 24 января 2011

Для этого вам необходимо иметь ограниченный список возможных типов данных и быть уверенным, что тип вашего строкового содержимого не является неоднозначным.Затем для каждого типа вы можете попытаться преобразовать строку в него, чтобы вы могли найти, какой это был тип.

0 голосов
/ 24 января 2011

Зачем вам нужно сравнивать их по базовому типу данных ?. Просто сравните их как строку. Или, если у вас есть другая переменная в виде строки, просто преобразуйте ее в строку, вызвав ToString(), и выполните сравнение на уровне строки.

...