【C#】Windowsで使用できるファイル名かチェックする

C# で Windows 上で使用できるファイル名かどうかをチェックする実装です。 using System.IO; using System.Text.RegularExpressions; public class WindowsFileSystem { // 使用禁止文字 static readonly char[] invalidChars = Path.GetInvalidFileNameCha…

【C#】NuGetパッケージを再インストールする

環境 Windows10 VisualStudio 2019 状況 以下でパッケージのキャッシュをクリアしたらエラーが出て「発行」できなくなった。 ツール > オプション > NuGet パッケージ マネージャー > すべての NuGet キャッシュをクリア 次に、Webプロジェクトを発行すると…

【C#】BenchmarkDotNetを使って処理時間を計測する方法

C# の処理の実行時間の測定やメモリ使用量、GCの量を正確に計測できるライブラリ「BenchmarkDotNet」の最速セットアップ & 使用方法の紹介したいと思います。実行時間を測定するために Stopwatch クラスを使用する方法もありますが、このライブラリを使った…

【C#】ExceptionのMessageを後から変更する

C# でいちど作成した Exception の Message プロパティは get のみで後からメッセージを変更することができません。 今回は一度作成した Exception オブジェクトの Message を変更したいと思います。 確認環境 VisualStudio 2022 .NET 6 IDE上からDebug実行…

【C#】オブジェクトにクラスが継承されているかどうかを調べる

あるオブジェクトに特定のクラスやインターフェースが継承されているかどうかを調べる処理方法は以下の通りです。 public static bool IsInherited1<T>(object obj) where T : class { return (obj as T) != null; // ★(1) asで変換できるかどうか調べる } publ</t>…

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

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

【UniTask】コールバックを待機できるように変換する

はじめに 処理の終了をコールバックで受け取る形式の非同期処理は UniTask の TrySetResult で async/await で待機可能に変換できます。 TrySetResultを使った変換は以下のように実装できます。 // 完了をコールバックで通知するメソッド public void Play(A…

【Unity】Teamsの入力中のアニメーションを実装してみる

Teams のチャットで相手が入力中の時にモニョモニョと表示される印字メーターのアニメーションを Unity + DOTween で実装してみました。 この機能、気が散るので OFF にしたいですがそういう設定はないみたいですね。 作成環境 Unity 2021.3 DOTween 実装コ…

【Unity】デリゲートを指定するときにGCAllocを減らす

あるメソッドの引数にデリゲートが必要な場合、GC Allocationを減らす方法の紹介です。 以下状況での GC Alloc が発生する話になります。 public static class SampleUtility { // デリゲートを引数に取るメソッド public int Execute(Action<int> method) { ... </int>…

【C#】Windows Formsの高DPI対応【2023年版】

Windows Forms で作成されたアプリの高 DPI 対応の 2023 年版の設定の話です。 この設定ですが、過去に色々と試行錯誤があったせいで情報が錯綜しています。この記事の最新の方法では各種設定が整理されて簡単に指定することができるようになりました。 確認…

【Minecraft】ゾンブレラで釣り出来ない現象

不具合なのか意図した挙動なの分からないけど、ソンブレラのデータパックを入れると釣りが不可能になる挙動があって、調査に結構時間を取られたのでメモしておきます。 構成 Minecraft 1.17.1 Forge 37.1.1 ゾンブレラ シーズン16 (Zombrella Season 16) Opt…

【C#】2進数を4桁ごとに区切って表示する

ある整数を2進数に変換し4桁ごとに区切り文字を入れる方法の紹介です。 // こんな数値を uint value = 0xCACAEFEF; // こんな風に文字列に変換する 1100 1010 1100 1010 1110 1111 1110 1111 Unity 上での使用を想定して GCAlloc が最小となる & そこそこ高…