System.Resources.ResourceWriter.WriteValue C# (CSharp) Méthode

WriteValue() private méthode

private WriteValue ( ResourceTypeCode typeCode, object value, BinaryWriter writer ) : void
typeCode ResourceTypeCode
value object
writer System.IO.BinaryWriter
Résultat void
        private void WriteValue(ResourceTypeCode typeCode, object value, BinaryWriter writer)
        {
            Contract.Requires(writer != null);

            switch (typeCode)
            {
                case ResourceTypeCode.Null:
                    break;

                case ResourceTypeCode.String:
                    writer.Write((string)value);
                    break;

                case ResourceTypeCode.Boolean:
                    writer.Write((bool)value);
                    break;

                case ResourceTypeCode.Char:
                    writer.Write((ushort)(char)value);
                    break;

                case ResourceTypeCode.Byte:
                    writer.Write((byte)value);
                    break;

                case ResourceTypeCode.SByte:
                    writer.Write((sbyte)value);
                    break;

                case ResourceTypeCode.Int16:
                    writer.Write((short)value);
                    break;

                case ResourceTypeCode.UInt16:
                    writer.Write((ushort)value);
                    break;

                case ResourceTypeCode.Int32:
                    writer.Write((int)value);
                    break;

                case ResourceTypeCode.UInt32:
                    writer.Write((uint)value);
                    break;

                case ResourceTypeCode.Int64:
                    writer.Write((long)value);
                    break;

                case ResourceTypeCode.UInt64:
                    writer.Write((ulong)value);
                    break;

                case ResourceTypeCode.Single:
                    writer.Write((float)value);
                    break;

                case ResourceTypeCode.Double:
                    writer.Write((double)value);
                    break;

                case ResourceTypeCode.Decimal:
                    writer.Write((decimal)value);
                    break;

                case ResourceTypeCode.DateTime:
                    // Use DateTime's ToBinary & FromBinary.
                    long data = ((DateTime)value).ToBinary();
                    writer.Write(data);
                    break;

                case ResourceTypeCode.TimeSpan:
                    writer.Write(((TimeSpan)value).Ticks);
                    break;

                // Special Types
                case ResourceTypeCode.ByteArray:
                    {
                        byte[] bytes = (byte[])value;
                        writer.Write(bytes.Length);
                        writer.Write(bytes, 0, bytes.Length);
                        break;
                    }

                case ResourceTypeCode.Stream:
                    {
                        StreamWrapper sw = (StreamWrapper)value;
                        if (sw.Stream.GetType() == typeof(MemoryStream))
                        {
                            MemoryStream ms = (MemoryStream)sw.Stream;
                            if (ms.Length > int.MaxValue)
                                throw new ArgumentException(SR.ArgumentOutOfRange_StreamLength);
                            byte[] arr = ms.ToArray();
                            writer.Write(arr.Length);
                            writer.Write(arr, 0, arr.Length);
                        }
                        else
                        {
                            Stream s = sw.Stream;
                            // we've already verified that the Stream is seekable
                            if (s.Length > int.MaxValue)
                                throw new ArgumentException(SR.ArgumentOutOfRange_StreamLength);

                            s.Position = 0;
                            writer.Write((int)s.Length);
                            byte[] buffer = new byte[4096];
                            int read = 0;
                            while ((read = s.Read(buffer, 0, buffer.Length)) != 0)
                            {
                                writer.Write(buffer, 0, read);
                            }
                            if (sw.CloseAfterWrite)
                            {
                                s.Close();
                            }
                        }
                        break;
                    }

                default:
                    Contract.Assert(typeCode >= ResourceTypeCode.StartOfUserTypes, string.Format(CultureInfo.InvariantCulture, "ResourceReader: Unsupported ResourceTypeCode in .resources file!  {0}", typeCode));
                    throw new PlatformNotSupportedException(SR.NotSupported_BinarySerializedResources);
            }
        }
    }