Как прочитать логическую ценность из потока как Textreader Asynchrony?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как прочитать логическую ценность из потока как Textreader Asynchrony?

Сообщение Anonymous »

У меня есть этот код, который работает, но это полный беспорядок. Есть ли более эффективный способ прочитать логическое значение из потока асинхронно, которое не включает проверку каждого персонажа таким ручным способом? < /P>
internal override async ValueTask DeserializeAsync(TextReader textReader, CancellationToken cancellationToken = default)
{
char[] buffer = new char[1];
Memory memoryBuffer = new Memory(buffer);
cancellationToken.ThrowIfCancellationRequested();

//read leading whitespace (why is there no str >> std::ws???)
do if (await textReader.ReadAsync(memoryBuffer, cancellationToken) < 1)
throw new EndOfStreamException();
while (char.IsWhiteSpace(buffer[0]));

//handle true case (not expecting uppercase)
if (buffer[0] == 't')
{
char[] buffer2 = new char[3];
Memory memoryBuffer2 = new Memory(buffer2);

cancellationToken.ThrowIfCancellationRequested();
if (await textReader.ReadAsync(memoryBuffer2, cancellationToken) < 3)
throw new EndOfStreamException();
else if (buffer2[0] == 'r' && buffer2[1] == 'u' && buffer2[2] == 'e')
{
Value = true;
return;
}
}
//false case
else if (buffer[0] == 'f')
{
char[] buffer2 = new char[4];
Memory memoryBuffer2 = new Memory(buffer2);

cancellationToken.ThrowIfCancellationRequested();
if (await textReader.ReadAsync(memoryBuffer2, cancellationToken) < 4)
throw new EndOfStreamException();
else if (buffer2[0] == 'a' && buffer2[1] == 'l' && buffer2[2] == 's' && buffer2[3] == 'e')
{
Value = false;
return;
}
}//neither true nor false
else
throw new InvalidDataException();
}



Подробнее здесь: https://stackoverflow.com/questions/797 ... chronously
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как прочитать логическую ценность из потока как Textreader Asynchrony?
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Ограничение списка С# или TextReader?
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • С#. Почему, когда я использую TextReader.Read(), он возвращает значение int? Можно ли конвертировать в char?
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Можете ли вы загрузить несколько файлов из Google Drive Asynchrony?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Чтение сообщений из IBM MQ Asynchrony - Загрузите много сообщений
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»