private RedisResult ReadSingleResult() { byte b = ReadByteOrFail(); switch ((char)b) { case '+': return(RedisResult.Message(ReadBytesToCrlf())); case '-': return(RedisResult.Error(ReadStringToCrlf())); case ':': return(RedisResult.Integer(ReadInt64())); case '$': return(RedisResult.Bytes(ReadBulkBytes())); case '*': var count = (int)ReadInt64(); if (count == -1) { return(RedisResult.Multi(null)); } var inner = new RedisResult[count]; for (int i = 0; i < count; i++) { inner[i] = ReadSingleResult(); } return(RedisResult.Multi(inner)); default: throw new RedisException("Not expecting header: &x" + b.ToString("x2")); } }