.NET
C# の型推論は大抵の場合型を推定してくれてジェネリックの型も推論で省略することができます。 特にジェネリックパラメータを推論によって省略できるため、メソッド使用時に型を書く手間がなくなり、コードの見た目もかなりすっきりできます。が、ごく一部…
あるメソッドの引数にデリゲートが必要な場合、GC Allocationを減らす方法の紹介です。 以下状況での GC Alloc が発生する話になります。 public static class SampleUtility { // デリゲートを引数に取るメソッド public int Execute(Action<int> method) { ... </int>…
ある整数を2進数に変換し4桁ごとに区切り文字を入れる方法の紹介です。 // こんな数値を uint value = 0xCACAEFEF; // こんな風に文字列に変換する 1100 1010 1100 1010 1110 1111 1110 1111 Unity 上での使用を想定して GCAlloc が最小となる & そこそこ高…
タイトルの通り、徐々に扱う数値が大きくなってくゲームを「インクリメンタルゲーム」と言ったりします。このジャンルは色々と呼び方があるようで「放置ゲー/放置ゲーム」や「クリッカーゲーム」(クッキークリッカーが特に有名です)などの呼び方もあります…
だんだん状況が変わってきたのでメモ。 2023年3月現在、.NET のバージョンと C#、VisualStudio の対応関係は以下のような関係性になっています。 .NET ver. C# ver. VisualStudio .NET 7 C# 11 2022 .NET 6 C# 10 2022 .NET 5 C# 9.0 2022, 2019 .NET Core 3…
C# で文字列から一部分を取り出す処理は Substring メソッドを使用します。 この記事では、SubString の使い方と注意点、便利な使い方を紹介したいと思います。 確認環境 .NET 6 VisualStudio 2022 Windows 11 この記事は C# であればどのバージョンでも使用…
プロジェクトのプロパティで「ターゲットOS」を Windows にした時に選択肢に出てくるバージョンの説明です。 実際これに具体的なバージョンを指定して何が変わるのかちょっとわからないですが、、、 「ターゲット OS バージョン」と「サポートされている OS …
.NET 5 → 6でホストの実装スタイルが変わりました。 今までやっていたあの設定はどこでできる?みたいな状態なので少しまとめてみました。 MagicOnion + IPC の設定で UseKestrel していましたが設定どこ行った…? // .NET 5 internal partial class Program…
CreateDefaultBuilder とかで作成した IHost なインスタンスのどこで IConfiguration を受け取れるかは以下の通りです。 確認環境 .NET 6 VisualStudio 2022 IHost host = Host.CreateDefaultBuilder(args) .ConfigureServices(services => { services.AddHo…
Windows Forms で作成したソフトをタスクトレイに常駐させてメインウインドウを表示しないときの実装方法の紹介です。 条件は以下の通り。 Windows Forms タスクバーにアイコンを表示しない タスクトレイの常駐させる 起動したときにウインドウ(フォーム)を…
サーバーで発生した例外はクライアントに RpcException として通知される。 基本の動作 // サーバー側 public class SampleService : ServiceBase<ISample>, ISample { public async UnaryResult<int> SumAsync(int x, int y) { throw new NotImplementedException("oh!");</int></isample>…
まず前提は以下の通り。 // これは .NETの型 System::String^ str = "10;" // こっちは .NET/C++(CLI)共通で使える型 double d = 0; 変換に使うメソッドはいくつかあるのでそれぞれの使い方です。 System::String^ str = "10"; double d = 0; int i = 0; // …
UniRx に付属しているプロセス内の簡易型の広域メッセージ送受信ライブラリのMessageBroker の使い方の紹介です。 最近は MessageBroker の代わりによりモダンな MessagePipe というライブラリもリリースされていますが、Unity で単一シーン、簡単な UI しか…
【Unity】スマホとPCの両方のタッチに対応する PCのクリックとスマホのタッチだと実は検出の実装方法が違うとのことで調べてみました。スマホ向けアプリを製作していてエディター上で動作確認しているシーンを想定しています。 // ★PC // 左クリックが押し込…
タイトルの通り gRPC のライブラリである MagicOnion を使いつつ IPC(プロセス間) 通信したいと思います。 ちなみに、MagicOnion を使うと WCF を使った RPC の API 呼び出しのワークフローと極めて似た感じで実装できるようになります。特に proto からの型…
Unity の Vector3 (Vector2 など構造体)に自分自身を書き換える処理を追加する拡張メソッドの定義方法の紹介です。 前提として以下のように Vector3 に拡張メソッドを定義して値を変更しようとしても値は変わらない事を確認します。 public static class Vec…
アプリなどでメモリ上に保持してる値って外部ツールで割と簡単に読み取ったり変更されてしまうんですよね。変更したときにどのアドレスに保存されているみたいな位置を特定されると実行中に値を書き換えられてしまいます。 そこでこれらの行為を防止するため…
以前にデータを AES 暗号化する方法を紹介しましたが、実装例が何らかのデータをアプリのメモリ上に byte 配列として全部に読み取った内容を展開してから AES 暗号化する方法でした。 この方法だと、例えば 1GB のファイルを暗号化しようとすると1GBぶん全て…
Unity の StreamingAssets に置いたファイルを読み取る実装例です。 Android と WebGL は特別な処理が必要だそうで UnityWebRequest を使ってデータを読み取るようです。それ以外のプラットフォーム(iOS, Windows, デバッグ中のエディタ上)では普通にファ…
Unityの2Dの表現で視差の効果を使ったパララックスのスクロール(Parallax)を実装例を紹介したいと思います。かつてレトロゲームの背景スクロールでよくありましたね。 この表現方法は、スクロールの速度が奥のほうがゆっくりで手前ほど早くスクロールする…
英語で各月の略号は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…
ObservableCollection でコレクションに格納されている要素の変更通知を受け取る方法です。 単純に Add されたときに要素に PropertyChanged を設定するだけでは全く考慮が足りないため現実的に子要素から通知を受け取る実装を考えたいと思います。 確認環境…
ObservableCollection は List に似た機能を持ってるクラスで、要素を追加したり削除したときにイベントが発生する機能を持つクラスです。この発生するイベントは、WPF とか UWP みたいな XAML 環境は MVVM が標準でサポートされているので、各コントロール…
PowerShell 構文を使って .NET のライブラリ使いながらスクリプト書と多少面倒な時があり C# で書けないかと思ったのでそのやり方の紹介です。PowerShell の中で C# のコードを書いてスクリプトを実行する方法の紹介です。 また別のところで作成した .NET の…
C# のリフレクションという機能を使用して任意の型の内容、public なフィールドとプロパティをすべて列挙してみようと思います。 リフレクションを使用するので、特定の型のメンバーを認識したうえでフィールドやプロパティの名前を指定して列挙するのではな…
SQLを発行した結果の列名を取得する方法です。 DbDataRecordからSchemaInfoを取得して列名と型を取得しようと思います。 C#でSQLをダイレクトに実行する場合、コネクションを取得しコマンドを発行した後、SqliteDataReader で結果を読み取るのが一般的です。…
Windows フォームなんかの古いライブラリで引数が Delegate のメソッドにラムダ式を書いたりすると「ラムダ式 はデリゲート型ではないため、'Delegate' 型に変換できません。」と怒られます。 // こんな風に書くと怒られる public partial class FormMain : …
よくブラウザでファイルをダウンロードしたときに既にそのファイルがあった場合、末尾に(1)、(2)...という風に連番が付いた別のファイルが作成されます。 // こんな風に連番が自動的に作成される Sample.zip Sample (1).zip Sample (2).zip これを C# で同じ…
あるオブジェクトが自分自身をメンバーに持つ、子要素を無限に繰り返して持てる構造を再帰構造とか再帰データと言います。 // 自分自身をメンバーにもつ構造 ClassA + ClassA + ClassA + null // 終端はnull こういう再帰構造をもつオブジェクトを別の再帰構…
.NET の Zip を扱うための ZipArchive クラスってファイルを zip に追加するための「CreateEntryFromFile」はありますが、フォルダを扱う「CreateEntryFromDireocty」みたいな操作はありません。 普通に使用したらすぐ必要になるので、ZipArchive でフォルダ…