System.IO.FileLoadException はアセンブリやファイルの読み込みが阻害されたときに発生し、原因はバージョン不一致・依存 DLL の不足・x86/x64 ミスマッチ・アクセス権不足の四つに集約されます。 スタックトレー
続きを読む »C#でUTF-8を取得する際はEncoding.UTF8が最短経路です。 コードページ65001を渡してEncoding.GetEncoding(65001)でも同じ結果になりますが、.NET Coreでの互換性や可読性を考えると前者が安全
続きを読む »FieldAccessExceptionは、不正なフィールドアクセスを試みた瞬間に発生するランタイム例外です。 privateなどで隠されたフィールドを直接触ったり、リフレクションで信頼レベルを超えて操作すると起こります。 修飾子やアクセス
続きを読む »dynamicは実行時に型解決とバインディングを行うため、静的型より呼び出しが数倍遅く、初回は特にオーバーヘッドが大きいです。 ループや高頻度アクセスでは性能劣化が顕著になるので、パフォーマンスが要となる部分では静的型を優先し、必要最小限の
続きを読む »ExternalExceptionは.NETでCOM相互運用やP/Invokeなど外部コードを呼び出す際に発生し得る汎用的な例外です。 失敗理由の数値はErrorCodeに格納され、個々の原因はDllNotFoundExceptionなどの
続きを読む »dynamic型でメンバーの有無を確かめず呼び出すと実行時にRuntimeBinderExceptionが発生するため、事前確認が欠かせません。 IDictionaryならContainsKey、ExpandoObjectなら((IDict
続きを読む »EndOfStreamExceptionはSystem.IOの例外で、ストリーム末尾を超えて読み込もうとした瞬間に発生します。 原因はデシリアライズ前にPositionを戻し忘れる、ループ中にEndOfStreamやLengthを確認しない
続きを読む »dynamicはコンパイル時の型チェックを外しパフォーマンスと安全性を犠牲にするため、C#ではインターフェース、ジェネリック、型パターンマッチングで代替し、IDE支援やリファクタリング性を保ちつつバグの混入リスクを減らす選択が推奨されます。
続きを読む »DuplicateWaitObjectExceptionは、WaitHandle配列に同一参照が複数含まれた状態でWaitAnyやWaitAllを呼び出した際に発生し、スレッド同期が停止します。 重複を事前に除去するか、配列作成時にDist
続きを読む »C#で文字列から任意のパターンを抜き出すならSystem.Text.RegularExpressions.Regexを使うのが定番です。 Regex.Matchは最初の一致を、Regex.Matchesはすべての一致を返し、キャプチャグルー
続きを読む »C#のRegex.Replaceは検索と置換をワンステップで行い、一括修正や動的変換を最小限のコードで実装できます。 $0などの置換トークンやMatchEvaluatorを組み合わせることで、数字の削除から条件付きの文字列加工まで柔軟に対応
続きを読む »演算子オーバーロードは独自型を+や==で扱えるため、計算や比較が直感的になり、呼び出し側の可読性も高まります。 一方で演算子に本来と異なる意味を持たせると動作が推測しにくくなり、デバッグや保守コストが上がる恐れに加え、わずかな性能劣化を招く
続きを読む »C#で数字とハイフンだけの文字列を判定する場合、先頭と末尾を固定した正規表現^[0-9-]+$を使えば、意図しない英字や記号を排除できるため、郵便番号や管理コードなどのチェックを簡潔かつ安全に行えます。 正規表現の基礎知識 プログラミングに
続きを読む »C#では演算子を自由に上書きできるわけではなく、対象は単項+ - ! ~ ++ -- true false、二項+ - * / % & | ^ << >>、比較== != < > <= &g
続きを読む »C#で数字の桁数を正規表現で厳密にチェックするには、先頭と末尾をアンカーし、\d{n}や\d{n,m}を使うのが定番です。 たとえば4桁なら^\d{4}
C#の演算子オーバーロードはユーザー定義型にも+や==などの演算子を与え、直感的な式を可能にします。 ただし静的メソッドoperatorとして実装する手間と、意味を崩さない設計が欠かせません。 補助メソッドを用意しつつ過度な多用を避けること
続きを読む »C#で数字を扱う正規表現は^\d+$で文字列全体が数字か判定し、\d+で部分的な数字列を抽出するのが基本です。 桁数制限には\d{3,6}など量指定子を加えます。 判定はRegex.IsMatch、抽出はRegex.Matchesを呼ぶだけ
続きを読む »小数点付きの数値をC#で判定したいとき、符号を考慮した最小パターン^[+-]?(\d+\.\d*|\.\d+)$が実用的です。 整数部の省略や末尾ドットを許容しつつ余計な書式を弾けるため、Regex.IsMatchで入力チェックを
続きを読む »C#の正規表現では空白文字を\sで表し、スペース、タブ、改行を一括で扱えます。 連続空白には\s+が便利で、Regex.Split(text, "\s+")ならトークン分割、Regex.Replace(text, "\s", "")なら全面
続きを読む »