Created
April 23, 2025 06:32
-
-
Save naratteu/6698682bbd2242a1f09300db533ed119 to your computer and use it in GitHub Desktop.
where is generic nullable type constraint
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"dotnet_interactive": { | |
"language": "csharp" | |
}, | |
"polyglot_notebook": { | |
"kernelName": "csharp" | |
}, | |
"vscode": { | |
"languageId": "polyglot-notebook" | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<details open=\"open\" class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>{ a = , b = , d = }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>a</td><td><div class=\"dni-plaintext\"><pre><null></pre></div></td></tr><tr><td>b</td><td><div class=\"dni-plaintext\"><pre><null></pre></div></td></tr><tr><td>d</td><td><div class=\"dni-plaintext\"><pre><null></pre></div></td></tr></tbody></table></div></details><style>\r\n", | |
".dni-code-hint {\r\n", | |
" font-style: italic;\r\n", | |
" overflow: hidden;\r\n", | |
" white-space: nowrap;\r\n", | |
"}\r\n", | |
".dni-treeview {\r\n", | |
" white-space: nowrap;\r\n", | |
"}\r\n", | |
".dni-treeview td {\r\n", | |
" vertical-align: top;\r\n", | |
" text-align: start;\r\n", | |
"}\r\n", | |
"details.dni-treeview {\r\n", | |
" padding-left: 1em;\r\n", | |
"}\r\n", | |
"table td {\r\n", | |
" text-align: start;\r\n", | |
"}\r\n", | |
"table tr { \r\n", | |
" vertical-align: top; \r\n", | |
" margin: 0em 0px;\r\n", | |
"}\r\n", | |
"table tr td pre \r\n", | |
"{ \r\n", | |
" vertical-align: top !important; \r\n", | |
" margin: 0em 0px !important;\r\n", | |
"} \r\n", | |
"table th {\r\n", | |
" text-align: start;\r\n", | |
"}\r\n", | |
"</style>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"#nullable enable\n", | |
"class A();\n", | |
"T? GetNull<T>(in T? t = default) where T : struct => t;\n", | |
"T? GetNull<T>(in T? t = default) where T : class => t;\n", | |
"new\n", | |
"{\n", | |
" a = GetNull<A>(),\n", | |
" b = GetNull<int>(),\n", | |
" d = GetNull<(int a, int b)>(),\n", | |
"}" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"dotnet_interactive": { | |
"language": "csharp" | |
}, | |
"polyglot_notebook": { | |
"kernelName": "csharp" | |
}, | |
"vscode": { | |
"languageId": "polyglot-notebook" | |
} | |
}, | |
"outputs": [ | |
{ | |
"ename": "Error", | |
"evalue": "(4,4): error CS0111: Type 'Submission#6' already defines a member called 'GetNull2' with the same parameter types", | |
"output_type": "error", | |
"traceback": [ | |
"(4,4): error CS0111: Type 'Submission#6' already defines a member called 'GetNull2' with the same parameter types" | |
] | |
} | |
], | |
"source": [ | |
"#nullable enable\n", | |
"class A();\n", | |
"T? GetNull2<T>() where T : struct => default;\n", | |
"T? GetNull2<T>() where T : class => default;\n", | |
"new\n", | |
"{\n", | |
" a = GetNull2<A>(),\n", | |
" b = GetNull2<int>(),\n", | |
" d = GetNull2<(int a, int b)>(),\n", | |
"}" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"dotnet_interactive": { | |
"language": "csharp" | |
}, | |
"polyglot_notebook": { | |
"kernelName": "csharp" | |
}, | |
"vscode": { | |
"languageId": "polyglot-notebook" | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<details open=\"open\" class=\"dni-treeview\"><summary><span class=\"dni-code-hint\"><code>{ a = , b = , d = }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>a</td><td><div class=\"dni-plaintext\"><pre><null></pre></div></td></tr><tr><td>b</td><td><div class=\"dni-plaintext\"><pre><null></pre></div></td></tr><tr><td>d</td><td><div class=\"dni-plaintext\"><pre><null></pre></div></td></tr></tbody></table></div></details><style>\r\n", | |
".dni-code-hint {\r\n", | |
" font-style: italic;\r\n", | |
" overflow: hidden;\r\n", | |
" white-space: nowrap;\r\n", | |
"}\r\n", | |
".dni-treeview {\r\n", | |
" white-space: nowrap;\r\n", | |
"}\r\n", | |
".dni-treeview td {\r\n", | |
" vertical-align: top;\r\n", | |
" text-align: start;\r\n", | |
"}\r\n", | |
"details.dni-treeview {\r\n", | |
" padding-left: 1em;\r\n", | |
"}\r\n", | |
"table td {\r\n", | |
" text-align: start;\r\n", | |
"}\r\n", | |
"table tr { \r\n", | |
" vertical-align: top; \r\n", | |
" margin: 0em 0px;\r\n", | |
"}\r\n", | |
"table tr td pre \r\n", | |
"{ \r\n", | |
" vertical-align: top !important; \r\n", | |
" margin: 0em 0px !important;\r\n", | |
"} \r\n", | |
"table th {\r\n", | |
" text-align: start;\r\n", | |
"}\r\n", | |
"</style>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"#nullable enable\n", | |
"class A();\n", | |
"Func<T>? GetNull3<T>() { return null; }\n", | |
"\n", | |
"new\n", | |
"{\n", | |
" a = GetNull3<A>()?.Invoke(),\n", | |
" b = GetNull3<int>()?.Invoke(),\n", | |
" d = GetNull3<(int a, int b)>()?.Invoke(),\n", | |
"}" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"dotnet_interactive": { | |
"language": "csharp" | |
}, | |
"polyglot_notebook": { | |
"kernelName": "csharp" | |
}, | |
"vscode": { | |
"languageId": "polyglot-notebook" | |
} | |
}, | |
"outputs": [ | |
{ | |
"ename": "Error", | |
"evalue": "(4,41): error CS8978: 'T' cannot be made nullable.", | |
"output_type": "error", | |
"traceback": [ | |
"(4,41): error CS8978: 'T' cannot be made nullable." | |
] | |
} | |
], | |
"source": [ | |
"#nullable enable\n", | |
"class A();\n", | |
"Func<T>? GetNull3<T>() { return null; }\n", | |
"T? GetNull4<T>() { return GetNull3<T>()?.Invoke(); }\n", | |
"new\n", | |
"{\n", | |
" a = GetNull4<A>(),\n", | |
" b = GetNull4<int>(),\n", | |
" d = GetNull4<(int a, int b)>(),\n", | |
"}" | |
] | |
} | |
], | |
"metadata": { | |
"kernelInfo": { | |
"defaultKernelName": null, | |
"items": [ | |
{ | |
"aliases": [ | |
"c#", | |
"cs" | |
], | |
"languageName": "C#", | |
"name": "csharp" | |
}, | |
{ | |
"aliases": [ | |
"f#", | |
"fs" | |
], | |
"languageName": "F#", | |
"name": "fsharp" | |
}, | |
{ | |
"languageName": "HTML", | |
"name": "html" | |
}, | |
{ | |
"languageName": "HTTP", | |
"name": "http" | |
}, | |
{ | |
"aliases": [ | |
"js" | |
], | |
"languageName": "JavaScript", | |
"name": "javascript" | |
}, | |
{ | |
"languageName": "Mermaid", | |
"name": "mermaid" | |
}, | |
{ | |
"aliases": [ | |
"powershell" | |
], | |
"languageName": "PowerShell", | |
"name": "pwsh" | |
}, | |
{ | |
"name": "value" | |
} | |
] | |
}, | |
"kernelspec": { | |
"display_name": ".NET (C#)", | |
"language": "C#", | |
"name": ".net-csharp" | |
}, | |
"language_info": { | |
"name": "python" | |
}, | |
"polyglot_notebook": { | |
"kernelInfo": { | |
"defaultKernelName": "csharp", | |
"items": [ | |
{ | |
"aliases": [], | |
"languageName": "csharp", | |
"name": "csharp" | |
}, | |
{ | |
"aliases": [ | |
"f#", | |
"fs" | |
], | |
"languageName": "F#", | |
"name": "fsharp" | |
}, | |
{ | |
"aliases": [], | |
"languageName": "HTML", | |
"name": "html" | |
}, | |
{ | |
"aliases": [], | |
"languageName": "HTTP", | |
"name": "http" | |
}, | |
{ | |
"aliases": [ | |
"js" | |
], | |
"languageName": "JavaScript", | |
"name": "javascript" | |
}, | |
{ | |
"aliases": [], | |
"languageName": "Mermaid", | |
"name": "mermaid" | |
}, | |
{ | |
"aliases": [ | |
"powershell" | |
], | |
"languageName": "PowerShell", | |
"name": "pwsh" | |
}, | |
{ | |
"aliases": [], | |
"name": "value" | |
} | |
] | |
} | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment