Created
February 24, 2021 03:32
-
-
Save ufcpp/a92e0133794777f2eab1ecadb23dab08 to your computer and use it in GitHub Desktop.
C# 9.0 で普通にコンパイルできるコード。semantics なしで lexical な情報だけ見てるコード整形ツールとかでガチで困ってるらしい。
This file contains 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
// record はキーワードの record が優先。 | |
// この行の @ を外すとコンパイル エラー。 | |
// これも「そうせざるを得なかった」みたいなノリで、できるのなら dynamic, var と同じ方針にする可能性もあった。 | |
@record record = new record { }; | |
// この2行はエラーにならない。 | |
dynamic dynamic = new dynamic(); | |
var var = new(); | |
// この行も OK。 | |
nameof nameof(nameof a) => nameof(a); | |
// さすがにこれだとコンパイルエラー。メソッド名の nameof よりも引数名の nameof の方が優先みたい。 | |
//nameof nameof(nameof nameof) => nameof(nameof); | |
// これは OK。引数名の方の nameof が優先で、 結果は "s" じゃなくてデリゲートの戻り値。 | |
// nameof 型、nameof メソッドがある状況下で nameof 演算子を呼ぶ手段はなさそう。 | |
string s = "abc"; | |
nameof m(System.Func<string, nameof> nameof) => nameof(s); | |
// この行もコンパイル エラー。 | |
// string s2 = nameof(nameof); | |
// C# 9.0 では、 record を型名として使うと警告を出すようにした。 | |
record record { } | |
// 既存の文脈キーワードは何も警告出さない。 | |
// record と同じ処理に変えてもいいんじゃない?という話になってる。 | |
// record では(原理的に破壊的に変更になってるけど実用上)誰も問題にしなかったし。 | |
class dynamic { } | |
struct var { } | |
class nameof { } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment