sh1’s diary

プログラミング、読んだ本、資格試験、ゲームとか私を記録するところ

C#

C# NLog の基本的な使い方2(Getting Start)

GettingStart 出力先を設定する NLog "targets" の概念 ログを出力する ログの layout と layoutrenderer について 高度な layout について (CSV, JSON など) target wrappers の概念 ベストプラクティス logger は各クラスで static 変数にする logger の文…

C# NLog の基本的な使い方1(NLog とは?)

NLog is なに? structured logging (構造化ログ) is なに? NLog の特徴を整理 更新頻度 はじめに (Getting started) の選択 参考 この記事は、NLog(ログを管理する機能)の使い方(基本)について調べたことを記事にしています。 2022 年 12 月現在、NLog…

C# デバイスマネージャーを開く(.NET 6)

解決 プラスα 参考 .NET Framework 時代のデバイスマネージャーは、以下のようなコードで呼び出されていたと思います。 Process.Start("devmgmt.msc"); .NET6 や .NET7 が現れる現在だと上記のコードは例外が発生してエラーになります。 An error occurred t…

WPF カスタムコントロールの作り方(ToggleButton の例)

カスタムコントロールライブラリ ToggleControl のうごき サンプル 参考 WPF のカスタムコントロールの作り方……というか、基本的には設計者が設計したとおりに動作すればそれでいいような気もしますが、WPF にはいろんなカスタムコントロールの作り方があっ…

複数の bool 値と byte 値を相互に変換する

byte to bool[8] bool[8] to byte サンプル 参考 DB を設計していると、ひとつの列で bool 値をまとめてしまおうという発想をすることがある。ほとんどのケースで、これは設計ミス(アンチパターン)となりやすいことで知られ、jaywalking(信号無視)パター…

C# init アクセサー (C#9.0) の使い方

これまでの流れ 一番の違いはオブジェクト初期化子 record 型専用の初期化 with 参考 C# 9.0 から init アクセサーが追加されています。比較的に使いやすいアクセサーですが、利用しているでしょうか。仕様を把握しているでしょうか。 これまでの流れ getter…

C# System.Text.Json コンバーターを利用する方法

C# .Net で Json 形式で書かれたファイルを扱う際は、2022 年現在だと System.Text.Json を利用するのがもっとも手軽だし、一般的だと思います。 このあたりと基本的な使い方については、以下の記事で記述しています。 C# System.Text.Json で非数値 NaN, In…

C# DI コンテナと CompositeDisposable の組み合わせ

使い方の例 参考 DI コンテナを利用しているプロジェクトで、リソースを破棄する処理をしようと思ったとき、CompositeDisposable を利用するという選択肢があります。 Window を閉じて終了するとき、Window の情報の〇〇を保存する アプリを終了するとき、ゲ…

C# 文字列の類似度を計算する N-gram

C# で実装する 参考 あいうえお あいうえの 上記のような文字列の類似度を計算するやり方には「n-gram」や「Jaro–Winkler distance」など色々なやり方があるみたいです。一番簡単と思ったやり方は「n-gram」でした。少し古いですが livedoor の技術ブログに…

C# .NET で試してみる CI/CD の CI (GitHub Actions)

GitHub Actions - workflows リポジトリーに Actions (workflow) を追加する シフト JIS で記述されたファイルはバグる バッジの追加 参考 プログラムを書く際や書いた後、CI/CD を利用/設定することは重要です。CI とは continuous integration(継続的イン…

C# Excel ファイルからセルのデータを読み込む(ClosedXML)

ClosedXML を使った読み込み サンプル 参考 C# で Excel ファイルを読み込んで利用する方法は、ライブラリーを利用したいくつかのやり方があると思います。おそらくよく検討に挙がりそうなのは以下のあたりだと思います。 COM 依存しない ClosedXML (MIT Lic…

IList から List<T>, IEnumerable<T> に変換する

IList to IList<T> global using ディレクティブ 参考 稀に IList 型のデータを受け取ることがあります。ObservableCollection の CollectionChanged のイベントなどは、IList で変更のあったデータのコレクションを返却します。 しかし、IList から IList<T> に変</t></t>…

LINQ 式のデータベースアクセスでクラス/インターフェースの型などを含めるとエラーになるときの対処

問題例 対応例 考察 参考 C# の LINQ 式によるデータベースアクセスの際に、クラス/インターフェースの値など、プリミティブ型ではない型を含めるとエラーになることがあります。 具体的なエラー内容 たとえば、次のようなコードが考えられます。 問題例 pub…

WPF トーストの表示

WPF (.NET6) でトースト表示をテストしてみた内容を記録します。 かつてのトースト表示は、アプリケーションをパッケージ化したり証明書が必要であったりしたため、利用には面倒がありました。 現在は、かなりの面倒がなくなっており、ちょっとした通知の実…

PlanetScale - SELECT INSERT UPDATE を実行する (Entity Framework)

初期化 SELECT INSERT UPDATE サンプル 参考 PlanetScale (MySQL 互換) の基本的な DML (select, insert, update) を C# の環境で実行してみた。今回は、Entity Framework を介してデータ操作をしてみる。 なお、EF を使わないやり方はこっち PlanetScale - …

PlanetScale - SELECT INSERT UPDATE を実行する

SELECT INSERT UPDATE Transaction & Insert おまけ1 日付を取得する おまけ2 サンプル 参考 PlanetScale (MySQL 互換) の基本的な DML (select, insert, update) を C# の環境で実行してみた。 接続文字列のパラメーターは、NuGet から「DotNetEnv」を使…

C# PostcodeJP の API を利用して郵便番号から住所を取得する

郵便番号 JSON 対応クラスの例 テスト サンプル 参考 郵便番号から住所を取得するやり方のひとつに PostcodeJP がある。 郵便番号から住所を取得する API は、いくつか無料のものが公開されています。PostcodeJP も無料で利用できますが、ユーザー登録および…

C# RESAS API を利用する

都道府県コード JSON 対応クラスの例 テスト サンプル 参考 都道府県コードや産業分類など、地域の情報(地域経済分析システム)を取得するやり方のひとつに RESAS がある。 RESAS は、2015 年から内閣府の地方創生推進室が開始したサービスで、2016 年から …

C# Null 非参照型と許容参照型 (CS8600)

null を許容する例 補足 null 値を許容する(null-forgiving) アノテーション属性 値/参照型で null 参照型の実装は全然違う ジェネリクス まとめ 参考 C# 8.0 から「C の null 値を許容する参照型」という機能が実装されています。 もともと、C# の参照型…

C# 再試行パターンを実装する

再試行パターン (Retry pattern) 補足 実装 テスト サンプル 参考 DB の操作 (DML) のような 99.99...% 成功する操作は信頼性が高いため(面倒で)リトライ処理を実装しないことがあるかと思いますが、実際はごく稀に失敗することがあって、失敗時の処理を横…

現実的なマルチスレッド (ロック) 対策

マルチスレッドとロックとは? マルチスレッド処理の準備 ロックしないマルチスレッド処理 lock 注意すること Interlocked ReaderWriterLockSlim SemaphoreSlim Mutex 実行結果のまとめ 補足 Volatile 修飾子 原子性 サンプル 参考 2021 年末現在、C# におけ…

C# パターンマッチングのデコンパイルコードを確認する

C# Advent Calendar 2021 を見てると、C# のパターンマッチングが便利らしい。 C#のアプデでめちゃくちゃ便利になったswitch文(パターンマッチング)の紹介 C#のプロパティによるパターンマッチングを使おう でも、パターンマッチングの中身が実際どんな判…

ローカルアプリでも API キーの取り扱いに注意する

ローカルのサンプルプログラムでも、GitHub にコミットするときなんかに API キーを使用していると困ることがあります。GitHub にサンプルコードをあげるときは、当然 API キーを隠します。で、API を使用する(実際に動作する)実行コードに書き換えるたび…

Prism 子ウィンドウ(ダイアログ)IDialogAware を表示する

Prism App.xaml MainWindow (View + ViewModel) Dialog1 Dialog2 サンプル 参考 Prism を利用するプロジェクトで子ウィンドウ(ダイアログ)を表示する方法は、バージョンの進化によって変化してきているようです。 現在(下記のバージョン記載)では、ダイ…

C# コーディングガイドライン&プラクティス 2021

この記事は、Microsoft MVP のひとり Vincent Maverick Sanchez Durano のブログ記事「C# Coding Guidelines and Practices - 2021」を個人的に雑訳したものです。 この記事では、一般的なソフトウェアエンジニアリング ガイドラインを紹介します。これらの…

WPF PasswordBox のバインドとその対策 (Windows Hello)

非推奨でも Password プロパティを Binding する Windows Hello を利用した認証 エラー発生するとき サンプル 参考 PasswordBox コントロールの Password プロパティは仕様のため、バインディングをすることができません。まずもって、バインディングをする…

Prism EventAggregator はユニットテストに Moq を使うこと

この記事は、ARCTOUCH のブログ記事「Using Moq for unit testing with Prism EventAggregator」を個人的に雑訳したものです。 前回記事では、Publisher-Subscriber パターンと EventAggregator を使用するメリット、そして、プロジェクトでの使用方法につい…

Prism EventAggregator を使用する方法

環境構築 (Installation?) コンストラクターの注入 (inject) イベントの作成 イベントの購読 イベントの発行 イベントの購読解除 高度なこと (Advanced stuff) 参考 この記事は、ARCTOUCH のブログ記事「How to use Prism EventAggregator for .NET app deve…

Prism EventAggregator をなぜ使うべきか

EventAggregator is なに? .NET アプリ開発に Prism EventAggregator をなぜ使用するのか? Prism EventAggregator をいつ利用するのか? Xamarin.Forms の EventAggregator ちょっとした注意点 参考 この記事は、ARCTOUCH のブログ記事「Why you should us…

WPF Prism サンプルコードの学習6(公式外サンプル1)

1. Bootstrap 2. ViewModelLocator 3. Module 4. MVVM の基本クラス 5. InteractionRequest 6. Navigation 7. EventAggregator 8. ModuleLoadSeq 9. RegionBehavior 10. ModuleCatalog まとめ 参考 前回まで Prism の公式サンプルを確認しました。補足として…