投稿

7月, 2021の投稿を表示しています

【C#】いつもLog4netの設定を忘れる

残念なことに、いつもLog4netの設定を忘れてしまうため、ここにメモを残します。 「日付毎にログファイルを入れ替える」という使い方が多いため、RollingFileAppenderのサンプルを掲載します。 また、設定ファイルはApp.configではなく、専用の設定ファイルを作成しています。 (log4netはNugetで取得してください。) ①Log4netの設定 log4net.config 各設定はXML内のコメントのとおりです。 ログの出力内容は「15:56:29.555, [1], INFO , (method name) Form1_Load, Load Main form.」みたいな感じです。 メソッド名は、非同期メソッドの場合は「MoveNext」が出力されます。ちゃんと表示させたい方はググってみてください。 ②AssemblyInfoにLog4netコンフィグレーションの設定を追加 ※AssemblyInfo.cs ③Log4netのロガーインスタンスを取得 ログを出力したい各クラスに、インスタンス取得を書きます。 ④ログを出力します。 ロガーインスタンス.レベル("メッセージ")で出力できます。 ⑤出力されたログ ログの出力イメージです。 ※Log4netはバージョン2.0.12、VisualStudio2022(preview)、.Net6(preview)で動作確認をしています。

【C#】エンティティクラスから一部のプロパティのみをCSV出力したい(カスタム属性使用)

 エンティティクラスのプロパティにカスタム属性を付けて、その属性を基にCSVへ出力をします。 また、カスタム属性には、出力順とヘッダーテキストを設定できるようにします。 ①カスタム属性クラスをつくります。 今回のカスタム属性はプロパティ向けなので、ターゲットをAttributeTargets.Propertyに。 多重設定を許さないので、AllowMultiple = falseに。 継承は必要ないので、Inherited = falseに。 ②エンティティクラス(適当)を用意して、出力したいプロパティにカスタム属性を設定します。 ※超適当でごめんなさい。 ③動作確認のため、エンティティクラスに適当に値を設定します。 ※ここからは、エンティティクラスを使用する任意のクラス、処理内に記載しています。 ④カスタム属性が設定されたプロパティのみを抽出して、出力順を昇順に並び替えます。 もう少しスマートなLinqの使い方が… .Where(...).OrderBy(...).Select(...)で書けばよいと思うの。 ⑤カスタム属性のヘッダーテキストと出力データを抽出します。 ※ここでは、エンティティの各プロパティもList<string>として格納していますが、お好きな様にしてください。 ⑥取り出した値をカンマ区切りでテキストファイルに出力します。 ソースは特別載せませんが、今回はList<List<string>>で渡していますので、1レコードの文字列リストをカンマでつないで1行として出力をしています。 ※参考:出力結果 ※動作確認はVS2022(preview)/.Net6(preview)です。

【C#】ComboBoxのデータソースにディクショナリを設定したい

コンボボックスのデータソースに、ディクショナリを設定します。 また、ディクショナリはアプリケーション構成ファイル(App.config)から作成します。 ①アプリケーション構成ファイルにディクショナリの素を定義します。 ②アプリケーション構成ファイルからディクショナリに設定します。 ※ディクショナリ(ComboboxSource)は別の場所で定義しています。 ③コンボボックスにディクショナリを設定します。 ※DataSourceはIListを実装しているか、Array系でないと設定できないため、List変換します。 ④コンボボックスで選択されたvalueを取得します。 ※単純にSelectedValueでOK。