.NET

新着順 人気順

C#の4つのTimerの用途と使い方

C#というか.NETのタイマーの種類について整理と説明をしたいと思います。 Timers.TimerとThreading.Timerの概要 Forms.TimerとDispatcherTimerの概要 4種類のオブジェクトの使い方 System.Timers.Timerの使い方 System.Threading.Timerの使い方 System.Windo…

【C#】Timerの精度にtimeBeginPeriodが効くのか確認する

System.Threading.Timer クラスで定周期に実行されるコールバックの実行間隔に対して、システムクロック解像度を指定する timeBeginPeriod が影響を与えるかどうかが気になったので検証してみたいと思います。*1 *2 通常だと、Timer の実行間隔を 1msを指定…

URP+2DRendererで画面の一部にモザイクやブラーをかける

URP + 2DRenderer にすると _OpaqueTexture が利用できない(設定しても画像が設定されない)ため旧来の GrabPass を使用したレンダリング結果に対して効果をつけることが直接はできませんでした。旧来、対処法として RenderTexture を使用した実装などで少…

【C#】TryParseExactとParseExactの使い方

すぐ忘れて何度も調べることになるのでメモ DateTime.TryParseExact と DateTime.ParseExact の使い方です。 確認環境 VisualStudio2019 C# 9.0 すごい昔からあるからバージョン不問 DateTime.TryParseExact 具体的なフォーマットを指定する場合以下のように…

【C#】INIファイルを読み書きする(DllImportなし)

INI ファイルを C# で読み書きするために DllImport で Windows の User32.dll 使うのは確かに簡単ですが汎用性に欠けると思うので、純粋な C# のみかつ、.NET 4.6 くらいからコピペで使えるライブラリを作成してみました。 ライブラリの性能 確認環境 形式…

ASP.NET WebAPIでURLパラメーターを受け取る

URLパラメータ*1は、URLの最後に以下のように加えられた変数を指します。 https://localhost:8080/app/v1/data?code=100 この「code=100」の部分を ASP.NET Core Web API で受け取る方法です。 確認環境 .NET 6 + ASP.NET Core Web API VisualStudio 2022 Wi…

【Unity/C#】Stateパターンで状態を管理する

今回は State パターンの説明と Unity/C# で使用するときの簡単な実装例の紹介です。 Stateパターンの説明 【前提】パターンを使わない場合 Stateパターン C#/Unityで実装する 【事前準備】Playerクラス Stateインターフェース StateImplement1, 2 Contextク…

【C#】QueueとConcurrentQueueの使い方

C# で キューというデータ構造を扱う Queue<T> クラスと、スレッド排他制御機能付きの ConcurrentQueue<T> クラスの使い方の紹介をしたいと思います。 2つのQueue まず「Queue」ですが一言で言うと、入れたデータが入れた順番に取り出せる入れ物の事を指します。以</t></t>…

【C#】非同期で排他制御できるSemaphoreSlimクラスの使い方

最近使用する回数が増えてきた非同期 (async/await) 対応の排他制御の紹介をしたいと思います。 はじめに 同時実行数に制限がある排他制御を行うため SemaphoreSlim クラスを使います。 このクラスはプロセス内に限定した排他制御を行いたい時(すなわち、別…

【C#】タスクトレイに常駐するアプリの実装Tips

Windows Forms で作成したソフトをタスクトレイに常駐させてメインウインドウを表示しないときの実装方法の紹介です。 条件は以下の通り。 Windows Forms タスクバーにアイコンを表示しない タスクトレイに常駐させる 起動したときにウインドウ(フォーム)を…

【C#】アプリを多重起動しないようにする

デスクトップで動作するアプリの多重起動を防止するための方法を紹介したいと思います。 確認環境 Windows 11 Visual Studio 2022 .NET 8 この記事は、Windows 11上でのみ動作を確認しています。 概要と実装 タスクトレイにアプリが何個も立ち上がっているの…

【C#】R3でスレッドセーフな値変更通知プロパティを実装する

OSSを探してみたのですが (1)プロパティを排他制御で保護しつつ、(2)変更したら通知を緩く出す、のような条件に一致するいい感じのが見つからなかったので自分で作ってみました。 確認環境 Visual Studio 2026 .NET 8 Windows11(マルチプラットフォームは未…

【C#】ValueObjectの実装例

2022-07-03 この記事は、int や string の代わりに使用する値はプリミティブ型だけど値が特定の意味を持つため型にして区別したい時に使用する immutable(不変性:一度作ったら以降に内容が変化しないよう) なオブジェクトを実現ための C# での実装例の紹…

VisualStudio2022でnull許容コンテキストを無効化する

VS2022 はデフォルトで「null 許容コンテキスト」というものが有効化されています。 これが有効化されていると以下のような警告が表示されます。 警告 CS8600 Null リテラルまたは Null の可能性がある値を Null 非許容型に変換しています。 警告 CS8601 Nul…

JAN,FEB/MAR... 英語の月の略語

英語で各月の略号は3文字の短い形式があります。 以下表の通り各月は3文字の大文字で表されます。 月 英略 英 01月 JAN January 02月 FEB February 03月 MAR March 04月 APR April 05月 MAY May 06月 JUN June 07月 JUL July 08月 AUG August 09月 SEP Septe…

【C#】ターゲットOSがWindowsの時のOSバージョン

プロジェクトのプロパティで「ターゲットOS」を Windows にした時に選択肢に出てくるバージョンの説明です。 実際これに具体的なバージョンを指定して何が変わるのかちょっとわからないですが、、、 「ターゲット OS バージョン」と「サポートされている OS …

【C#】ジェネリックが推論できないコード2選

C# の型推論は大抵の場合型を推定してくれてジェネリックの型も推論で省略することができます。 特にジェネリックパラメータを推論によって省略できるため、メソッド使用時に型を書く手間がなくなり、コードの見た目もかなりすっきりできます。が、ごく一部…

【C#】Fisher-Yatesを使って配列/リストをシャッフルする

Fisher-Yates(フィッシャーイェーツ)というアルゴリズムを使って配列やリストを並び替えたいと思います。 アルゴリズムの考え方ですが N 個の要素数があったとして 一番最後の要素 (N) をそれ以外の前方の要素とランダムに交換する 一番最後から -1個目を…

ASP.NET Core 9.0をWindowsサービス化する

タイトルの通り、ASP.NET Core 9.0 の Kestrel を Windows サービス化してみようと思います。 以前「ASP.NET Core 2.0をWindowsサービス化する」という記事を書きましたがあれから状況が大きく変わっているため現時点の最新環境でどのように実現するのか紹介…

【C#】R3のReactivePropertyのスニペット

R3 という Reactive Extensions(Rx) のモダンな実装が登場しました。Unity 向けの専用機能としてではなく、通常の .NET 開発環境でも利用可能なため、R3 を使った Observable なメッセージングの仕組みを環境を選ぶことなく利用できるようになりました。 利…

【C#】System.Threading.Lockの使い方とobject lockとの性能比較

.NET 9 から同期的な排他制御用の System.Threading.Lock というクラスが追加されました。 元々存在する lock 構文はそのままに、lock 用に用意していた object などをほぼそのまま置き換えられる上、より高速に動作するということなので使い方の確認と性能…

【C#】プロセスの現在のメモリ使用量を取得する

2022-07-04 Environmentクラスで取得する プロセスが使用しているメモリ使用量を取得するには Environment クラスの WorkingSetProperty を参照すれば現在の使用量が取得できます。 long currentSet = Environment.WorkingSet Console.WriteLine("現在のメモ…

C#でリストの特定の要素の位置を変更する

あるリストに入ってる1つの要素の順序(位置)を変更します。 例えば、5番目の要素を3番目に移動したいなどの状況想定します。List クラスを使いますがこのようなメソッドは存在しません。 実装例 順序変更を List クラスの拡張メソッドとして実装したいと思い…

C#のBigInteger型で超巨大な数字を扱う

C#の組み込み型で最も大きい値を扱える型は、double型です。最大値は、1.7x 10の308乗とありますが、浮動小数点の精度の関係で実際扱える有効桁数が17桁程度なので極大の数値に対し有効桁外の演算を行うと計算結果に反映されない…みたいな状態になります。 …

【C#】リストの内容をランダムに重複せず取り出す

ある数列の内容を重複せずにランダムに取り出す方法を紹介したいと思います。 「同じ数字は出したくない」という場面で使用できるかと思います。 この実装を使用した場合の使用方法は以下の通りです。 public static void Main(string[] args) { // リストの…

C#でDictionaryのキーに複数のキーを設定する

2022-01-31 DictionaryのKeyに指定するオブジェクトを工夫することで複数のキーを指定できるようにしたいと思います。ただし、検索する見かける Tuple を使用した複数の値の組み合わせを Dictionary のキーに指定する方法はが見づらい & 値の意味が不明瞭化…

【C#】リストから要素をランダムにN個取得する

今回は、リストから要素をN個取得する実装方法の紹介をしたいと思います。 いちど選んだ要素はもう使わない + データを取り出した後に元のリストが変化しないように実装していきます。 確認環境 使い方 RandomUtilクラス 関連記事 確認環境 実装環境は以下の…

【C#】appsettings.jsonをコンソールで扱う

コンソールアプリでも App.config に代わる新しい定義ファイルの形式である appsettings.json を使用する場合の設定と実装方法の紹介です。 ASP.NET Core および ASP.NET 5~6 であれば、IServiceCollection.Configure にセクション名を渡せば勝手に内容をオ…

C#でビット操作を簡単に行うラッパークラスの紹介

例えばC#でハードウェアに近い I/O を扱う場合、1チャンネルが ushort の1ブロックの読み書きが要求されていて、各ポートはビットごとに割り当てられているなんてケースが割とありますがいちいち出力ポートの設定を読んでビット操作をしてまた書き込むなどの…

【C#】リストや配列をクラス外に安全に公開する方法

この記事は、あるクラスの中で管理しているリストや配列をクラス外に公開して参照してもらう時に安全に公開する方法や考え方や実装の紹介です。 あるクラス内で管理しているリストをクラス外に公開する場合に具体的にどういった危険性があるのか、どうすれば…