C#のCustomAttributeFormatExceptionはカスタム属性のバイナリ形式が不正なときに実行時やリフレクション中に発生します。 原因はparams引数とデフォルト値の併用や列挙型の不正値などパラメータ定義ミスが大半です。
続きを読む »C#でDLLを作るにはVisual Studioでクラスライブラリを選び、共有したい機能を持つクラスやメソッドをpublicで実装してビルドするだけです。 生成された.dllを別プロジェクトで参照追加すれば、動的リンクでコードを再利用でき、
続きを読む »CultureNotFoundExceptionは、CultureInfo生成時などに無効なカルチャ名を渡すと発生するランタイム例外です。 カルチャコードのタイプミスやOS未対応が主な原因で、正しいBCP-47形式へ修正するか近い既存カルチ
続きを読む »Reflectionやdynamic型を使い、Assembly.LoadFromでDLLを読み込みActivator.CreateInstanceでインスタンスを生成してメソッドを呼ぶと、ビルド時参照を固定せず機能を後付けできます。 頻繁な
続きを読む »複数DLLを1ファイルにまとめたいなら、.NET FrameworkではILMerge、.NET Core以降ではSingle-file publishやILRepack、汎用的に使いやすいのはCostura.Fodyです。 配布をシンプル
続きを読む »C#ではDataSetをJSONへ変換する際、System.Text.JsonやNewtonsoft.JsonでDataTableあるいはDataSet全体をSerializeできます。 テーブル名がキーとなり各行が配列要素です。 null
続きを読む »DLLをデバッグするには、ビルド設定をDebugにしてpdbを生成し、呼び出しアプリかプロセスにブレークポイントを張るだけで十分です。 ソリューション内に両方あるならスタートアップを実行側に設定し、単体ならプロジェクトのデバッグコマンドに実
続きを読む »C#でCSVの文字化けを防ぐには、読み書き時にStreamReaderやStreamWriterへEncodingを明示すればよいでしょう。 Shift‐JISの読み込みはEncoding.GetEncoding(932)、UTF-8でEx
続きを読む »C#で作ったDLLをC++から扱うには、クラスライブラリをDLL化し、COM登録やC++/CLIブリッジで関数を公開し、C++側で#importやP/Invoke相当の宣言を用意します。 ビット数と呼び出し規約、文字列などのマーシャリングを
続きを読む »CSV文字列やファイルをC#で配列に変換するには、もっとも簡単なのは文字列をSplit(',')で区切る方法ですが、セル内にカンマや改行が含まれる場合はTextFieldParserやCsvHelperなどの専用ライブラリを使うと安全です。
続きを読む »C#でCSVをオブジェクトへ変換する方法には、自前でStreamReaderとSplitを使う手軽な手法と、ライブラリCsvHelperを活用してスマートに扱う手法があります。 手軽な方法は外部依存がない反面、区切り文字や改行を細かく管理す
続きを読む »基底クラスに引数付きコンストラクタのみがある場合、派生クラスのコンストラクタ冒頭で: base(引数)と書き、必ず呼び出す必要があります。 引数なしコンストラクタが基底側にあれば暗黙呼び出しが行われます。 複数オーバーロードを用意すると生成
続きを読む »C#の継承は基底クラスの機能を派生クラスへ共有し、共通ロジックを再利用できます。 virtualを付けたメンバーは派生側でoverrideして振る舞いを上書きでき、これがオーバーライドです。 ポリモーフィズムにより基底型変数から呼んでも派生
続きを読む »C#の組み込み型は、整数や浮動小数点、真偽値、文字列、オブジェクトなど基本データを扱うために用意された核となる型群です。 intやdoubleなど値型はメモリ効率と高速計算を支え、stringやobjectなど参照型はデータ構造の柔軟性を担
続きを読む »C#の演算子は、数値計算の+ - * / % ++ --、比較の== != < > <= >=、論理の&& || !、ビット操作の& | ^ ~ << >>、複合代入+
続きを読む »c# で環境変数を追加する際は、Environment.SetEnvironmentVariableメソッドで環境変数の名前、値、ターゲット(プロセス、ユーザー、システム)を指定して設定する方法が利用できます。 これにより、プログラム実行中
続きを読む »C#の継承は、親クラスの機能を引き継ぎ再利用性を高めるための仕組みです。 既存のコードを柔軟に活用できる点が魅力です。 一方でインターフェースは、クラスが実装すべきメソッドやプロパティの契約ごとを定め、異なるクラス間で一貫した動作を実現する
続きを読む »C#では、環境変数はEnvironment.GetEnvironmentVariableメソッドでシンプルに取得でき、変数名を指定するだけで必要な値を得ることができます。 また、全体の環境変数はEnvironment.GetEnvironm
続きを読む »C#の配列は固定サイズなので、直接の削除はできません。 削除する場合、削除したい要素を除外して新たな配列を作成する方法や、一度配列をListに変換し削除後に再度配列化する方法が利用できます。 また、要素に初期値を上書きしたり、Array.C
続きを読む »