{"record":{"id":"8f72d5d470e87bf8","repo":"icsharpcode/ILSpy","slug":"types","errorCode":null,"errorMessage":"types","messagePattern":"types","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs","lineNumber":1291,"sourceCode":"\r\n\t\t/// <summary>\r\n\t\t/// Decompiles the whole module into a single string.\r\n\t\t/// </summary>\r\n\t\tpublic string DecompileWholeModuleAsString()\r\n\t\t{\r\n\t\t\treturn SyntaxTreeToString(DecompileWholeModuleAsSingleFile());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decompile the given types.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Unlike Decompile(IMemberDefinition[]), this method will add namespace declarations around the type definitions.\r\n\t\t/// </remarks>\r\n\t\tpublic SyntaxTree DecompileTypes(IEnumerable<TypeDefinitionHandle> types)\r\n\t\t{\r\n\t\t\tif (types == null)\r\n\t\t\t\tthrow new ArgumentNullException(nameof(types));\r\n\t\t\tvar decompilationContext = new SimpleTypeResolveContext(typeSystem.MainModule);\r\n\t\t\tsyntaxTree = new SyntaxTree();\r\n\t\t\tvar namespaces = new HashSet<string>();\r\n\t\t\tforeach (var type in types)\r\n\t\t\t{\r\n\t\t\t\tCancellationToken.ThrowIfCancellationRequested();\r\n\t\t\t\tif (type.IsNil)\r\n\t\t\t\t\tthrow new ArgumentException(\"types contains null element\");\r\n\t\t\t\tRequiredNamespaceCollector.CollectNamespaces(type, module, namespaces);\r\n\t\t\t}\r\n\r\n\t\t\tvar decompileRun = CreateDecompileRun(namespaces);\r\n\t\t\tDoDecompileTypes(types, decompileRun, decompilationContext, syntaxTree);\r\n\t\t\tRunTransforms(syntaxTree, decompileRun, decompilationContext);\r\n\t\t\treturn syntaxTree;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r","sourceCodeStart":1273,"sourceCodeEnd":1309,"githubUrl":"https://github.com/icsharpcode/ILSpy/blob/60c08fcb74fcc183130f73c861ed35cf944d0bf1/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs#L1273-L1309","documentation":"Thrown by CSharpDecompiler.DecompileTypes(IEnumerable<TypeDefinitionHandle> types): if types == null -> throw new ArgumentNullException(nameof(types)). The message is the parameter name 'types'. DecompileTypes needs a (possibly empty) sequence of handles to decompile.","triggerScenarios":"Calling DecompileTypes(null), or passing a LINQ expression that yielded null instead of an empty enumerable.","commonSituations":"Caller built the handle list conditionally and returned null; an upstream query returned null.","solutions":["Pass a non-null IEnumerable<TypeDefinitionHandle> (use Enumerable.Empty<TypeDefinitionHandle>() for 'none').","Null-check the sequence at the call site."],"exampleFix":"// before\nvar tree = decompiler.DecompileTypes(maybeNullHandles);\n\n// after\nvar handles = maybeNullHandles ?? Enumerable.Empty<TypeDefinitionHandle>();\nvar tree = decompiler.DecompileTypes(handles);","handlingStrategy":"validation","validationCode":"var handles = types ?? Enumerable.Empty<TypeDefinitionHandle>();\nvar tree = decompiler.DecompileTypes(handles);","typeGuard":null,"tryCatchPattern":"var tree = decompiler.DecompileTypes(\n    types ?? throw new ArgumentNullException(nameof(types)));","preventionTips":["Return empty enumerables instead of null from query/factory code that feeds DecompileTypes."],"tags":["decompiler","csharp","argument-null"],"backgroundTag":null,"analyzedSha":"60c08fcb74fcc183130f73c861ed35cf944d0bf1","analyzedAt":"2026-08-13T11:34:51.223Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}