InvalidFilterCriteriaExceptionはリフレクションでメンバー検索を行う際、フィルター引数が不正なときに発生します。 BindingFlagsの組み合わせミスやデリゲートシグネチャの不一致が主因で、引数を検証し、tr
続きを読む »InvalidCastExceptionは互換性のない型へキャストした瞬間に発生し、実行時にプログラムを停止させます。 対策は事前にisやasで型確認し、ConvertやToStringなど安全な変換メソッドを使い、ボックス化解除時は元の型
続きを読む »メモリ確保に失敗するとInsufficientMemoryExceptionが投げられます。 主な要因は32ビット版のアドレス空間制限、メモリリーク、巨大オブジェクトです。 64ビット化やデータ構造の見直し、プロファイラでのリーク検出が対策
続きを読む »結論、C#でINIファイルを扱うならNuGetのIniParserが最短ルートです。 数行でセクションとキーを指定して値を取得でき、Unicodeやコメントも自然に扱えます。 Win32 APIのGetPrivateProfileStrin
続きを読む »C#のFormatExceptionは、文字列を数値や日付などに変換する際に形式が合わないと発生する例外です。 ユーザー入力や外部データが期待形式か確認せずにParseすると起きやすいので、TryParseやDateTime.TryPars
続きを読む »C#のFuncは戻り値を持つデリゲートで引数は最大16個に固定です。 可変長引数を扱いたい場合はparams付きメソッドを作り、それをFunc<int[], TReturn>などでラップすると扱いやすくなります。 ラムダ式を挟ん
続きを読む »foreachは配列の要素を先頭から順に読み取る最も手軽な方法です。 インデックスを意識せず要素にアクセスでき、境界チェックも不要なのでバグを減らせます。 ループ中に要素追加や削除はできないため構造を変えたい場合はforが向きます。 読み取
続きを読む »foreachには先頭要素を特定する構文がないため、最初だけ別処理したいときはFirst()で取り出し残りをSkip(1)で回す、またはfor文でインデックス0を処理し1から走査する方法が手早くシンプルです。 foreachと先頭要素の処理
続きを読む »foreachでは末尾を自動取得できないため、手早い方法はcollection.Last()と現在要素を比較する手法です。 ただし呼ぶたびに列挙が走る点がネックなので、Select((v,i)=>…)でインデックスを受け取りCount
続きを読む »C#で最大値を求めるなら、2つだけならMath.Max、複数ならLINQの配列.Max()が最短です。 ループにifを組み合わせcurrent < xで更新していく方法は、判定条件を変えるなど細かく制御したい場面に向きます。 型自体の
続きを読む »C#でAES暗号化を使うと、対称鍵方式の強力なセキュリティを簡潔に実装できるため、通信やファイル保存の機密性を高められます。 Aes.Create()で鍵とIVを生成し、CreateEncryptorとCreateDecryptorを用いて
続きを読む »C#で日時を任意の形で表示するにはDateTimeやDateTimeOffsetのToStringに書式指定文字列を渡します。 標準書式"G"などは地域設定に合わせ、カスタム書式"yyyy/MM/dd HH:mm:ss"なら固定形で出力。
続きを読む »SHA-256は一方向ハッシュ関数です。 C#ではSHA256.Create()とComputeHashで32バイトの固定長値を取得できます。 同じ入力は常に同じ結果になるためパスワードにはソルトを加え、レインボーテーブル対策を取るのが定番
続きを読む »MD5はC#で手軽にSystem.Security.Cryptography.MD5.Create()を使い、文字列を128ビットのハッシュへ変換できますが、衝突が発見されているためパスワードや機密データの保護用途には不向きです。 整合性確
続きを読む »C#ではDateTime同士をそのまま==, <, >などで比べられ、DateTime.CompareやCompareToも同様に負値・0・正値で結果を返します。 日付だけを見たい場合はDateプロパティで時刻を切り落とすのが安
続きを読む »C#の構造体は値型なので代入やメソッド引数で丸ごとコピーされ、コピー後は互いに独立です。 ただしフィールドに参照型を含む場合は参照先を共有するため、深い複製が必要なら手動で新しいインスタンスを作成する必要があります。 サイズが大きい構造体は
続きを読む »値だけを扱い短命で小さく不変ならstructが適し、高頻度コピーでもヒープ割当を避けられるため軽量です。 継承や状態共有、サイズが大きく寿命が長いデータにはclassを選び、参照渡しでメモリ負荷を抑えつつ機能拡張も柔軟です。 基本 構造体と
続きを読む »C#では構造体もJsonSerializer.SerializeでそのままJSON文字列へ変換でき、JsonSerializer.Deserialize<StructType>で復元できます。 プロパティをpublicのget/
続きを読む »C#で機密データを守るには、対称鍵方式のAesと非対称鍵方式のRSAを使うケースが主流です。 Aesは同じ鍵とIVで高速に暗号化と復号が行え、RSAは公開鍵で暗号化し秘密鍵で復号できるため鍵共有を安全に行えます。 シーンに合わせてアルゴリズ
続きを読む »