C #. Почему, когда я использую TextReader.Read (), он возвращает значение int? Возможно преобразовать в символ? - PullRequest
3 голосов
/ 27 июня 2011

Итак, TextReader.ReadLine () возвращает строку, а TextReader.Read () возвращает значение типа int.Это значение int также представляется в каком-то формате, который я не распознаю.Можно ли преобразовать это целое число в символ?Спасибо за любую помощь.

РЕДАКТИРОВАТЬ:

Значения TextReader = новый StreamReader (@ "txt");

    string SValue1;
    int Value1;       
    Value1 = Values.Read();        
    Console.WriteLine(Value1);
    Console.ReadKey();

Когда он считывает значение, оно дает мне 51в качестве выхода.Первый символ в текстовом файле - 3. Почему он это делает?

Ответы [ 3 ]

2 голосов
/ 27 июня 2011

Документация сообщает вам: она возвращает -1, если больше нет данных для чтения, а в противном случае возвращает символ в виде целого числа.Целое число не "в каком-то формате";целые числа являются необработанными данными.Это, скорее, символы, которые «отформатированы»;байты на диске должны интерпретироваться как символы.

После проверки на -1 (которое не является допустимым символьным значением и представляет конец потока - вот почему метод работает следующим образом: так что вы можете проверить),вы можете конвертировать, просто применив.

2 голосов
/ 27 июня 2011

Read возвращает int o, что конец потока (-1) может быть обнаружен. Да, вы просто приводите результат к символу, как в var c = (int) reader.Read();.

Типичное использование:

while (true)
{
    int x = reader.Read();
    if (x == -1) break;
    char c = (char) x;
    // Handle the character
}
1 голос
/ 27 июня 2011

В соответствии с документацией для класса StringReader (подкласс TextReader), возвращаемое значение Read() может быть преобразовано в символ, но вам нужно проверить, находитесь ли вы всначала конец файла / строки (проверяя на -1).Например, в этом измененном коде из документации:

while (true)
{
    int integer = stringReader.Read();

    // Check for the end of the string before converting to a character.
    if (integer == -1)
        break;

    char character = (char) integer; // CONVERT TO CHAR HERE

    // do stuff with character...
}
...