/// <summary> /// Write a non-[<see cref="FlagsAttribute"/>] enum value as an Enumerated with /// tag UNIVERSAL 10. /// </summary> /// <param name="tag">The tag to write.</param> /// <param name="enumValue">The boxed enumeration value to write.</param> /// <exception cref="ArgumentNullException"> /// <paramref name="enumValue"/> is <c>null</c> /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="tag"/>.<see cref="Asn1Tag.TagClass"/> is /// <see cref="TagClass.Universal"/>, but /// <paramref name="tag"/>.<see cref="Asn1Tag.TagValue"/> is not correct for /// the method --OR-- /// <paramref name="enumValue"/> is not a boxed enum value --OR-- /// the unboxed type of <paramref name="enumValue"/> is declared [<see cref="FlagsAttribute"/>] /// </exception> /// <exception cref="ObjectDisposedException">The writer has been Disposed.</exception> /// <seealso cref="WriteEnumeratedValue(System.Security.Cryptography.Asn1.Asn1Tag,object)"/> /// <seealso cref="WriteEnumeratedValue{T}(T)"/> public void WriteEnumeratedValue(Asn1Tag tag, object enumValue) { if (enumValue == null) { throw new ArgumentNullException(nameof(enumValue)); } WriteEnumeratedValue(tag.AsPrimitive(), enumValue.GetType(), enumValue); }
/// <summary> /// Write a non-[<see cref="FlagsAttribute"/>] enum value as an Enumerated with /// tag UNIVERSAL 10. /// </summary> /// <param name="value">The boxed enumeration value to write.</param> /// <param name="tag">The tag to write, or <see langword="null"/> for the default tag (Universal 10).</param> /// <exception cref="ArgumentNullException"> /// <paramref name="value"/> is <see langword="null"/>. /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="tag"/>.<see cref="Asn1Tag.TagClass"/> is /// <see cref="TagClass.Universal"/>, but /// <paramref name="tag"/>.<see cref="Asn1Tag.TagValue"/> is not correct for /// the method. /// /// -or- /// /// <paramref name="value"/> is not a boxed enum value. /// /// -or- /// /// the unboxed type of <paramref name="value"/> is declared [<see cref="FlagsAttribute"/>]. /// </exception> /// <seealso cref="WriteEnumeratedValue(Enum,Asn1Tag?)"/> /// <seealso cref="WriteEnumeratedValue{T}(T,Asn1Tag?)"/> public void WriteEnumeratedValue(Enum value, Asn1Tag?tag = null) { if (value == null) { throw new ArgumentNullException(nameof(value)); } WriteEnumeratedValue(tag?.AsPrimitive() ?? Asn1Tag.Enumerated, value.GetType(), value); }
/// <summary> /// Write a non-[<see cref="FlagsAttribute"/>] enum value as an Enumerated with /// tag UNIVERSAL 10. /// </summary> /// <param name="tag">The tag to write.</param> /// <param name="enumValue">The boxed enumeration value to write.</param> /// <exception cref="ArgumentNullException"> /// <paramref name="enumValue"/> is <c>null</c> /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="tag"/>.<see cref="Asn1Tag.TagClass"/> is /// <see cref="TagClass.Universal"/>, but /// <paramref name="tag"/>.<see cref="Asn1Tag.TagValue"/> is not correct for /// the method --OR-- /// <typeparamref name="TEnum"/> is not an enum --OR-- /// <typeparamref name="TEnum"/> is declared [<see cref="FlagsAttribute"/>] /// </exception> /// <exception cref="ObjectDisposedException">The writer has been Disposed.</exception> /// <seealso cref="WriteEnumeratedValue(Asn1Tag,object)"/> /// <seealso cref="WriteEnumeratedValue{T}(T)"/> public void WriteEnumeratedValue <TEnum>(Asn1Tag tag, TEnum enumValue) where TEnum : struct { WriteEnumeratedValue(tag.AsPrimitive(), typeof(TEnum), enumValue); }
/// <summary> /// Write a non-[<see cref="FlagsAttribute"/>] enum value as an Enumerated with /// tag UNIVERSAL 10. /// </summary> /// <param name="tag">The tag to write.</param> /// <param name="value">The boxed enumeration value to write.</param> /// <exception cref="ArgumentNullException"> /// <paramref name="value"/> is <see langword="null"/>. /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="tag"/>.<see cref="Asn1Tag.TagClass"/> is /// <see cref="TagClass.Universal"/>, but /// <paramref name="tag"/>.<see cref="Asn1Tag.TagValue"/> is not correct for /// the method. /// /// -or- /// /// <typeparamref name="TEnum"/> is not an enum. /// /// -or- /// /// <typeparamref name="TEnum"/> is declared [<see cref="FlagsAttribute"/>]. /// </exception> /// <seealso cref="WriteEnumeratedValue(Enum,Nullable{Asn1Tag})"/> public void WriteEnumeratedValue <TEnum>(TEnum value, Asn1Tag?tag = null) where TEnum : Enum { WriteEnumeratedValue(tag?.AsPrimitive() ?? Asn1Tag.Enumerated, typeof(TEnum), value); }