この記事は「初心者だった時に知りたかったな…」っていう普通のC#入門だと教えてくれないことが書いてあります。
なので入門記事というより、C#初心者にはちょっと難しい内容もあります!
C#は6.0までゆっくりな変化だったんですが…
7.0から様子が変わって8.0以降は毎年変わるようになりました。
↓こちらのスライドの7ページから数枚が参考になります!
あんまり変わらないバージョンもありますが、特に大きなところだと,
スクリプトみたいに書けるようになったので入門記事のサンプルコードは全部書き換えないといけないレベルです。それまでは初心者には要らないお約束を毎回書いてましたから...
null安全とパターンマッチは使うと別言語レベルで変わりました。(たぶん他の言語でもそうだと思いますけど)
インデントが減ったのとコレクション式は普段の書き味めちゃくちゃ変わりました。
特にインデントは「減らそう、減らそう」と言われるわりに、文法的に実質無理じゃん…🥺、って所が減ったので読みやすさもエディタの幅も節約できてすごく実感があります。
「動くんだから古い書き方でええやんけ🤨」
と言えないのがC#。
古いのも動く、は、使ってても問題ない、と言うわけじゃなくて、
っていう感じで、今使ってるとマズイ感じのも色々あります。
他の言語ならdeprecatedにするやつを、残しちゃうんですよね。
新しいコードで古い書き方を書く理由はまああんまりないです。
「最新です!」って顔した20年前・10年前の情報が簡単に出てきます…
だからcscでコンパイルするような初心者が後を絶たないんだと思います…
C#の場合、5年前の情報は使えないなぁという印象ですし、3年前でも「ちょっと怪しい」です。
(なのでこの記事の寿命も3年位かな…?)
今でも使えるのかどうか、別の方法になってないか、ちゃんと調べないと役に立ちません。
老舗のサイトとかも実は問題で、もうやらなくてもいい・知らなくてもいい古い情報が残ってるから混乱します。
公式のマニュアルも結構そんなところがあります。
ここはAIじゃなくてコードアナライザー(Roslynアナライザー)を使いましょう。
まずい書き方・古い書き方も指摘してくれる(lint機能)上に、修正提案もしてくれること(code fix機能)もあります。
https://zenn.dev/inuinu/articles/c60abf13d5f47a#aiが教えてくれないことも教えてくれる!
「AIチャットくん、メモリに教えてもどうしてすぐ忘れるん?」
最新のC#で書いてね、と指示しても、最初のうちはいいけれどだんだん忘れてしまいます。
また、何が最新なのか判断付いてないこともあって、古い書き方を書くことも。
常に指示できる仕組みがある場合は↓みたいに具体的に指示したほうがいいです。
(例:github copilot)
# C#コードへの生成に関する指示- 以下の指示に従ってC#コードを生成してください- 最新のC#の記法を使ってください- 可能な場合は常に以下に従う事- ファイル単位の namespace 宣言- コレクション式の利用- キャストやasではなくパターンマッチングhttps://learn.microsoft.com/en-us/dotnet/api/

スクリプト言語ばっかり触っている人の中には、C#のようなコンパイル言語はコンパイルしないとエラーがわからない、
と勘違いしている人がいるようです。
C#を始めとした現代のコンパイル言語は、「ちゃんとした」環境で開発すればコンパイル不要でリアルタイムにエラーがわかります(IDEやエディタが言語サーバーと連動しているため)。
C#はアナライザー(他言語のLinter)も動くため、「ちゃんとした」環境なら警告や推奨も事前にわかります。
「ちゃんとした」環境を使えているかどうか、がとても大事なので、
Windows標準の.NET Framework + メモ帳とかで開発しちゃうと、
本当にひどいことになります。
この2つはごちゃまぜになって説明されることが多いです!
C# (しーしゃーぷ)
.NET (どっとねっと)
.NETのAPIが使えて、.NETのランタイムで動く言語は他にも「F#」「PowerShell」「VisualBasic.NET (VB.NET)」とかがあります。
「C# = .NET」ではありませんが、.NETというとまずはC#、という感じです。
ここのウソが書かれた入門記事や動画は、参考にしないでください。
あまりにも古くて参考にならない情報だったり、動くけど誰ももうそんなコード書いてないっていうサンプルがのっていたりする危険があります。
なんと!最近書かれてる記事とかでも書かれてることがよくあります!
そういう情報があるとメチャクチャ混乱するので、今すぐちゃんとした入門記事や動画を見ましょう。
正確にはウソじゃなくて単に古いだけ…というものもありますが、
初心者むけの入門記事で書いてあると調べようがないので初心者はウソだと思ったがほうがいいです!
https://zenn.dev/inuinu/articles/csharp-native-aot
| .NETランタイム | 容量 | 制限 | |
|---|---|---|---|
| ネイティブコンパイル(NativeAOT) | 不要 | 小さい | 多い |
| JITコンパイル | 不要 | 大きい | 少ない |
| JITコンパイル (要ランタイム) | 要 | 小さい | 少ない |
cscを使う、というのはウソdotnetコマンドのサブコマンドでコンパイルしますdotnet builddotnet publishdotnet testなんと有名な入門サイトでこれ説明してます....アカーン!
C#でこういう Hello World が出てきたら、もう今は大ウソです。
usingSystem;namespaceSample{classProgram{staticvoidMain(string[] args){ Console.WriteLine("Hello World!");}}}今のC#のHello Worldはこれです。
Console.WriteLine("Hello World!");なんと、公式のマニュアルのチュートリアルもダメです。
https://learn.microsoft.com/ja-jp/dotnet/csharp/tour-of-csharp/
!try.netとかdotnetfiddleとかだと確かに対応してなくて動かないこともあるけど…
ただし、dotnet new consoleでつくったテンプレはちゃんと1行になってます。
// See https://aka.ms/new-console-template for more informationConsole.WriteLine("Hello, World!");namespace A;って書き方Console.WriteLine("Hello, World!");dotnet new.gitignoreが作れるdotnet new gitignoredotnet new editorconfigバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。
