public override bool Equals(object obj)
        {
            PlistString other = obj as PlistString;

            if (other == null)
            {
                return(false);
            }

            return(_value == other._value);
        }
        internal IPlistElement ParseObject(long obj)
        {
            this.BaseStream.Seek(ObjectOffsets[obj], SeekOrigin.Begin);
            byte type = this.ReadByte();

            switch (type & 0xF0)
            {
            case 0x00:
                switch (type)
                {
                case 0x00:
                    return(new PlistNull());

                case 0x08:
                    return(new PlistBool(false));

                case 0x09:
                    return(new PlistBool(true));

                //case 0x0C:
                //case 0x0D:
                //    return new PlistUrl.ReadBinary(this, type);
                case 0x0E:
                    return(PlistUid.ReadBinary(this, type));

                case 0x0F:
                    return(null);
                }
                break;

            case 0x10:
                return(PlistInteger.ReadBinary(this, type));

            case 0x20:
                return(PlistReal.ReadBinary(this, type));

            case 0x30:
                return(PlistDate.ReadBinary(this, type));

            case 0x40:
                return(PlistData.ReadBinary(this, type));

            case 0x50:
            case 0x60:
            case 0x70:
                return(PlistString.ReadBinary(this, type));

            //case 0x80:
            //    return PlistUuid.ReadBinary(this, type);
            case 0xA0:
                return(PlistArray.ReadBinary(this, type));

            //case 0xB0:
            //case 0xC0:
            //    return PlistSet.ReadBinary(this, type);
            case 0xD0:
                return(PlistDict.ReadBinary(this, type));
            }

            throw new PlistException(String.Format(
                                         "Unknown binary Plist object encountered. Object {0} at offset 0x{1:x} has a tag of 0x{2:x}",
                                         obj,
                                         this.BaseStream.Position - 1,
                                         type));
        }