C#
作成日時:2024-08-29
更新日時:2024-11-16
LINQ
コレクションだったり、DB、XML等のデータを操作できる。
JavaのStreamみたいなやつ。
かつORMみたいなやつ。
Stringも実装している。IEnumerable<char>
target.all(c => Char.IsDigit(c))とか。
LINQ構文よりメソッド構文の方がやれること多い。
enumerable(イニューマラブル)
Blazor
リンク
.NET - Wikipedia
.NET Framework - Wikipedia
.NET Frameworkはメジャーアップデート終了。
Windows Server 2022のサポート期間(2031年10月14日)まではサポートが保証されるはず。
.NETが開発の推奨環境らしい。
Visual Studio Community 2022
License Terms | Microsoft Visual Studio Community 2022 - Visual Studio
会社での開発は基本ライセンス違反。(例外あり)
テスティングフレームワーク
- MSTest
- NUnit
- xUnit
言語バージョン
バージョン確認
【C#】C#のバージョンと.NETのバージョンを確認する方法 #VisualStudio - Qiita
バージョン指定
Visual Studio 2019 で C# の言語バージョンを指定する - rksoftware
フォーマッタ―
.NET コード スタイル ルール オプション - .NET | Microsoft Learn
Visual Studio 2019 で一括フォーマットしたい #C# - Qiita
コマンド
// 選択範囲
Ctrl + K → Ctrl + F
// ファイル全体
Ctrl + K → Ctrl + D
ルール
ツール>オプション>テキストエディタ
チーム
ツール>オプション>テキストエディタ
の各言語の「コードスタイル画面」から「.editorconfig」を出力できる。
内容は現時点で設定されているルール。
追加>新しいEditor Configでそれをインポートすれば、チーム内で共通のルールを使用可能。
VS CodeでC#の開発をする
「Visual Studio Community 2022」がライセンス的に使えない場合。
1. SDKをインストールする
.NET のダウンロード (Linux、macOS、Windows)
「dotnet —version」でバージョンが出てきたらよし。
基本的にこのCLIを使用して開発する。
コマンド詳細は下記。
dotnet コマンド - .NET CLI | Microsoft Learn
2. VS Codeに拡張機能を入れる
「C#」は必ず入れる。
「C#」は文字通り、C#を扱うための拡張機能。これを入れる。
.editorconfig
「.editorconfig」もサポートしている。
ルートに「.editorconfig」を置けば、基本動く。保存時にフォーマットしてくれる。
動かないならば、設定で「Dotnet > Server: User Omnisharp」をONにすること。
※「C# Dev Kit」と競合するらしいので、「C# Dev Kit」を使っているならOFFにする。
※何故か「.editorconfig」の内容を即時反映しない。編集したら再起動が必要。
他にもあるので任意。
VSCodeでC#開発をする方法
補足
「C# Dev Kit」は、VS communityと同じようなライセンス。
大きい組織では有償となる。
(VS Codeで拡張機能を検索し、画面右側のライセンスをクリックすれば、遷移先にその旨が書いてある。)
「.NET Install Tool」はその名の通り、.NRTのSDK周りをいい感じにしてくれるツール。
「C#」が依存しているので、「C#」をインストールすれば勝手に入る。
3. アプリケーション作成 + 起動
# プロジェクト作成
dotnet new console
# 起動
dotnet run
# ビルド
dotnet build (-C Release)
- Models: データモデル(クラス)
- ViewModels: ビューモデル(MVVMパターンで使用)
- Services: ビジネスロジック
- Views: ビュー(WPFなど)
- Utilities: 共通ユーティリティクラス
- Tests: 単体テスト
4. デバッガ(初回)
- デバッグしたいC#のコードを表示した状態で、F5を押す。
- デバッガーの選択にて「.NET 5 + .NET Core」と出るので、それを押下。
- 何事も無ければ、「${workspaceFolder}/.vscode」や「${workspaceFolder}/bin」にデバッグ設定などが、生成される。
- .vscode内部の「launch.json」と「tasks.json」と弄ればいろいろできる。
エラーが発生した場合、ワークスペースのディレクトリ構造が、よろしくない可能性がある。
対象プロジェクトフォルダをルートディレクトリにすれば、動く可能性がある。
もしくは、.vscode内のファイルを修正。
第3回 Visual Studio CodeでC#コードをデバッグするための構成ファイル設定の基本:特集:Visual Studio Codeデバッグ入門(1/3 ページ) - @IT
1ワークスペースに複数のプロジェクトを配置し、それぞれデバッガを動かしたい場合
下記のディレクトリ構造があるとする。
root
├─test1
└─test2
- test1をワークスペースに追加
- デバッガを動かす
- test2をワークスペースに追加
- 2の時にできた「.vscode」フォルダをコピペして、中身を編集する。
test1とtest2をワークスペースへ同時に追加してからデバッガを動かすと、
「.vscode」フォルダの生成に失敗する可能性がある。
rootそのものをワークスペースに追加すると、root直下に「.vscode」フォルダを作ったり、
上手くいかなかったりする。
メモ
ソリューションファイル
- 複数のプロジェクトの管理
- プロジェクト間の依存関係の管理
- ソリューション全体のビルド
dotnet build ソリューションファイル
FormのGUI
(無料だと)無さそう。
非同期
- asyncキーワードは、そのメソッドが非同期処理を「できる」ことを示すマーカー。awaitがなければ非同期にはならない。
- 非同期メソッドでも、その中に「awaitを使用した非ブロッキングAPIの呼び出し」が無ければ同期的、つまり単一スレッドで実行される。
- 非同期メソッドのawait以降の記述は、そのawaitを使用している非同期処理のコールバックのシンタックスシュガーと言える。
- awaitはTaskから値を取り出す。
- 非同期メソッドでawaitが出たら、呼び出し元に戻ると考える。
async Task Method1() {
// something1とsomething2は並列で動く
var t1 = Task.run(() => {something1();});
something2();
await t1;
// something4はsomething3の完了後に動く
var t2 = await Task.run(() => {something3();});
something4();
// 親スレッドが先に終了する可能性がある
await Task.run(() => {something3();});
}
Entity Framework Core
- 直でSQLを書けると言えば書ける
- 匿名型を使えば、受け取るオブジェクトを定義しなくともよい
- ただし、結果をメソッドの戻り値にしたいならば、それを定義して詰める必要がある
例外
throw;
throw ex;
後者はスタックトレースが消える。
yamlとプロパティクラスの概念がある
Enum
Enumはあるけれども数値だけ。
JavaのEnumっぽく使う場合。
- Dictで保持したい内容を持っておく
- 属性 + リフレクション(または拡張メソッド)
- switch
- 通常のクラスを作って、定数クラスにする