{"record":{"id":"ff3bdba13037521a","repo":"jstedfast/MailKit","slug":"value-cannot-be-null-parameter-keywords","errorCode":null,"errorMessage":"Value cannot be null. (Parameter 'keywords')","messagePattern":"Value cannot be null\\. \\(Parameter 'keywords'\\)","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"MailKit/MessageFlagsChangedEventArgs.cs","lineNumber":89,"sourceCode":"\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageFlagsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageFlagsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"keywords\">The user-defined keywords.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"keywords\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageFlagsChangedEventArgs (int index, MessageFlags flags, IReadOnlySetOfStrings keywords) : base (index)\n\t\t{\n\t\t\tif (keywords == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (keywords));\n\n\t\t\tKeywords = keywords;\n\t\t\tFlags = flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageFlagsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageFlagsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"modseq\">The modification sequence value.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageFlagsChangedEventArgs (int index, MessageFlags flags, ulong modseq) : base (index)","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/jstedfast/MailKit/blob/9d3859a7855e3e17582c07fd01972b8e262bf176/MailKit/MessageFlagsChangedEventArgs.cs#L71-L107","documentation":"The MessageFlagsChangedEventArgs(int index, MessageFlags flags, IReadOnlySetOfStrings keywords) constructor requires a non-null keywords set. ArgumentNullException is thrown when keywords is null. Pass an empty set instead when there are no keywords.","triggerScenarios":"Raising or constructing MessageFlagsChangedEventArgs manually (e.g. in custom folder implementations or tests) with keywords = null.","commonSituations":"Implementing a custom IMailFolder or proxy that forwards flag-change notifications but passes through a null keywords collection from upstream code.","solutions":["Pass an empty set (e.g. new HashSet<string>() as IReadOnlySetOfStrings) instead of null","Check upstream data and default null keywords to an empty collection before constructing the args","In library internals, report the null to the MailKit maintainers with a stack trace"],"exampleFix":"// before\nnew MessageFlagsChangedEventArgs(index, flags, null);\n// after\nvar keywords = (IReadOnlySetOfStrings)(rawKeywords ?? new HashSet<string>());\nnew MessageFlagsChangedEventArgs(index, flags, keywords);","handlingStrategy":"validation","validationCode":"if (keywords == null) keywords = new HashSet<string>();\nvar args = new MessageFlagsChangedEventArgs(index, flags, keywords);","typeGuard":"IReadOnlySetOfStrings NonNull(IReadOnlySetOfStrings set) => set ?? new HashSet<string>();","tryCatchPattern":"try { args = new MessageFlagsChangedEventArgs(index, flags, keywords); }\ncatch (ArgumentNullException ex) when (ex.ParamName == \"keywords\") { args = new MessageFlagsChangedEventArgs(index, flags, new HashSet<string>()); }","preventionTips":["Treat 'no keywords' as an empty set, never null","Coalesce nullable collections at event-construction boundaries","Initialize keyword collections in constructors of your folder wrappers"],"tags":["mailkit","argument-validation","null","events"],"backgroundTag":"null-argument","analyzedSha":"9d3859a7855e3e17582c07fd01972b8e262bf176","analyzedAt":"2026-09-15T15:46:11.592Z","contentChangedAt":"2026-09-15T15:46:11.592Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}