private BEncodeList decodeList()
        {
            BEncodeList value = new BEncodeList();
            char start = (char)reader.ReadByte();
            bool hasFinal = false;
            if (start == 'l')
            {
                while (true)
                {
                    char actual = (char)reader.PeekChar();
                    if (actual == 'e')
                    {
                        hasFinal = true;
                        reader.ReadByte();
                        break;
                    }
                    if (actual == 'd')
                    {
                        value.Add(decodeDictionary());
                    }
                    else if (actual == 'l')
                    {
                        value.Add(decodeList());
                    }
                    else if (actual == 'i')
                    {
                        value.Add(decodeInteger());
                    }
                    else if (char.IsDigit(actual))
                    {
                        value.Add(decodeString());
                    }
                    else
                    {
                        throw new BEncodeException("cant recognize type in list");
                    }
                }
            }
            else
            {
                throw new BEncodeException("list must start with l");
            }

            if (!hasFinal)
            {
                throw new BEncodeException("list must finish with e");
            }
            return value;
        }