dotnet/wpf · error · InvalidEnumArgumentException

InvalidEnumArgumentException(nameof(format), (int)format…

Error message

InvalidEnumArgumentException(nameof(format), (int)format, typeof(TextDataFormat))

What it means

Clipboard.ContainsText(TextDataFormat) only accepts text formats (Text, UnicodeText, OemText, Rtf). Any other or undefined TextDataFormat value throws InvalidEnumArgumentException naming the format parameter.

Solutions

  1. Pass only TextDataFormat.Text, UnicodeText, OemText, or Rtf
  2. Validate with Enum.IsDefined / DataFormats.IsValidTextDataFormat before calling
  3. Use the parameterless ContainsText() for default Unicode text

Example fix

// before
Clipboard.ContainsText((TextDataFormat)rawValue); // may throw
// after
var fmt = (TextDataFormat)rawValue;
if (DataFormats.IsValidTextDataFormat(fmt)) { Clipboard.ContainsText(fmt); }
Defensive patterns

Strategy: validation

Validate before calling

bool IsValid(TextDataFormat f) => f is TextDataFormat.Text or TextDataFormat.UnicodeText or TextDataFormat.OemText or TextDataFormat.Rtf;
if (!IsValid(format)) throw new ArgumentOutOfRangeException(nameof(format));

Type guard

static bool IsTextFormat(TextDataFormat f) => Enum.IsDefined(typeof(TextDataFormat), f) && f is TextDataFormat.Text or TextDataFormat.UnicodeText or TextDataFormat.OemText or TextDataFormat.Rtf;

Try / catch

try { result = Clipboard.ContainsText(format); }
catch (InvalidEnumArgumentException ex) { log.Warn($"Bad TextDataFormat: {format}", ex); result = false; }

Prevention

When it happens

Trigger: Calling Clipboard.ContainsText with a cast or computed value outside the valid text formats, e.g. (TextDataFormat)7 or TextDataFormat.Html when unsupported by IsValidTextDataFormat.

Common situations: Persisting format enums from config/interop and passing them unchecked; assuming all TextDataFormat members are valid; integer round-trips of enum values.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14). Data as JSON: /api/errors/3f45480c27dbbb05. Report an issue: GitHub.

Appendix: source

Thrown at src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs:61

    public static bool ContainsFileDropList() => ContainsDataInternal(DataFormats.FileDrop);

    /// <summary>
    ///  Return <see langword="true"/> if Clipboard contains the image format. Otherwise, return <see langword="false"/>.
    /// </summary>
    public static bool ContainsImage() => ContainsDataInternal(DataFormats.Bitmap);

    /// <summary>
    ///  Return <see langword="true"/> if Clipboard contains the text data format which is unicode.
    ///  Otherwise, return <see langword="false"/>.
    /// </summary>
    public static bool ContainsText() => ContainsDataInternal(DataFormats.UnicodeText);

    /// <summary>
    ///  Return <see langword="true"/> if Clipboard contains the specified text data format which is unicode. 
    ///  Otherwise, return <see langword="false"/>.
    /// </summary>
    public static bool ContainsText(TextDataFormat format) => !DataFormats.IsValidTextDataFormat(format)
        ? throw new InvalidEnumArgumentException(nameof(format), (int)format, typeof(TextDataFormat))
        : ContainsDataInternal(DataFormats.ConvertToDataFormats(format));

    /// <summary>
    ///  Permanently renders the contents of the last IDataObject that was set onto the clipboard.
    /// </summary>
    public static void Flush() => ClipboardCore.Flush().ThrowOnFailure();

    /// <summary>
    ///  Get audio data as Stream from Clipboard.
    /// </summary>
    public static Stream? GetAudioStream() => GetTypedDataIfAvailable<Stream>(DataFormatNames.WaveAudio);

    /// <summary>
    ///  Get data for the specified data format from Clipboard.
    /// </summary>
    public static object? GetData(string format)
    {
        ArgumentException.ThrowIfNullOrEmpty(format);

View on GitHub (pinned to 81131a70a4)