C#

【C#】インターネット ショートカットを普通のショートカットに変換する

Windows 上にあるインターネットショートカットを普通のショートカットに変換するプログラムです。 既定のブラウザに関わらず指定したブラウザ(Chorome)で強制的に開くように変換します。 using IWshRuntimeLibrary; using System; using System.Collections…

【C#】リストのジェネリックを親クラスに変換する

List<T> の T を親クラスやインターフェースに変換したいこと無いですか?継承関係があって安全に変換できるならジェネリックの型は親クラスに互換してても良さそうですが List の T では認められていません。この操作はできないので代替案の話になります。 た</t>…

【C++/CLI】std::functionにマネージドメソッドをバインドする

std::function にメソッドを関連付ける時は std::bind を使用しますが C++/CLI でマネージドメソッドを std::bind 渡したい場合の実装方法の紹介です。 C++11 以降で関数ポインタの代わりに std::function でコールバック呼び出しされるような局面でマネージ…

【C++/CLI】Action<T1, T2>, Func<..>がエラーになる

C++/CLI で Action は使用できるのに Action<T1, T2> 以降が「E2154 ジェネリック クラス "System::Action" の引数が多すぎます」でエラーになる場合の対処方法です。 ソリューションエクスプローラー > 該当のプロジェクト > 参照 > System.Core を追加 どうやら定</t1,>…

【C#】少し変わった拡張メソッドを作成する

C#では既存のクラスにメソッドを追加できる「拡張メソッド」という機能があります。 今回はこの拡張メソッドの少々変わった使い方の紹介です。 確認環境 今回の確認環境は以下の通りです。 .NET Core5(C# 9.0) VisualStudio 2019 Windows 10 拡張メソッド…

【C#】ビットフィールドのenumから値をすべて取り出す

ビットフィールドして宣言された enum (=FlagsAttribute が付与されているenum型) に複数の値が指定されている場合に設定されてるすべての値を別々に取り出す実装例の紹介です。 変数内メンバーを全て列挙する 例えば以下のようにビットフィールドとして宣言…

UnityEngine.RandomとSystem.Randomがあいまいなのを解決する

タイトルの通りですが、以下のように2つの名前空間を using すると Unity のクラス名と C# の標準ライブラリのクラス名が同じためエラーが出ます。 using System; using UnityEngine; public static class Sample { public static void Foo() { // エラー CS…

ValueObjectでファイルパスとファイル名を区別する

string 変数が xxxFilePath と書いてあってファイル名しか入ってない、xxxFileName と書いてあったのに中身はファイルパスということが頻発したりこのstring型そもそも何が入ってるのかわからないなんて事が頻発したので対応策を考えました。プリミティブな…

【C#】MainメソッドでIDE1006の警告が出る場合

標準テンプレートでは以下のような指摘事項が表示されます。割とうっとおしい。 // IDE1006 名前付けルール違反: 最初の単語 'Main' は、小文字で始まらなければなりません static void Main(string[] args) これは .NET の一般的な名前付けのガイドラインが…

【C#】リフレクションでnullチェックを自動化する

リフレクションを使って null チェックを自動化する方法です。 C# で null チェックをする場合以下のようなコードを書くと思います。 // サンプル用のクラスと変数宣言 public class Sample { public int A { get; set; } public int B { get; set; } } var …

【C#】コンストラクタの挙動まとめ

C# のコンストラクターの宣言のされ方による呼び出しの基本的な動作のまとめです。暗黙のコンストラクターと継承したときの挙動を中心に確認しています。内容は自分用のメモです。久しぶりに気にすると動きを忘れていることがあったので改めて文字に起こして…

【C#】ValueObjectの実装例

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

【Unity】JsonUtilityで配列とリストを処理する

Unity の JsonUtility の話です。Unity では JSON をオブジェクトに変換(デシリアライズ)したり、オブジェクトを JSON に変換(シリアライズ)するための JsonUtility というライブラリがあります。 この JsonUtility というライブラリ動作が非常に高速で…

【C#】リフレクションでオブジェクトの内容を比較する

リフレクションを使ってオブジェクトを中身で比較する方法です。 C#でオブジェクトを比較するときは以下のようにコードを書くと思います。 // サンプル用のクラスと変数宣言 public class Sample { public int A { get; set; } public int B { get; set; } }…

JSONを整形して保存するC#の実装例

未整形の JSON を整形してファイルに保存しなおす C# プログラムの実装例です。未知の構造の JSON フォーマットを扱うので Newtonsoft の JSON ライブラリ(の JObject )を使用します。 実装環境 .NET Core 3.1 C# 9.0 VisualStudio2019 Windows10 実装コー…

C#の文字列補完はToStringした方が高速になる理由を調べてみた

はじめに C# の「文字列補完」機能という機能があります。ものすごい雑に言うと C# 6 以降で可能な文字列の先頭に「$」起動を付けることでフォーマット付き文字列の視認性を向上することができる機能です。例えば以下のような記述ができます。 // (1) // 旧…

【C#】Listと配列に対するforとforeachのアクセス速度の比較

先に結論ですが、全く同じ処理を for と foreach で行った場合、Listではfor、配列では foreach の方が早いです。 確認環境 Listのアクセス速度 実装コード 計測結果 配列のアクセス速度 確認コード 計測結果 速度がListと配列で逆転する理由 おまけ 悪い計…

C#で再帰を使わずにフォルダ内のファイルを列挙する

再帰処理を使わないでC#でフォルダ階層をたどってファイルをリストアップする方法の紹介です。 最後に記載がありますが実際はフォルダを巡回する必要ありません。C#はAPIをひとつつ呼ぶだけで実装できます。 再帰処理を使ってファイルを列挙する 再帰処理を…

【C#】StartsWithを複数の文字列対応する

string クラスに StartsWith という特定の文字列で始まるかどうかをチェックできるメソッドがあります。 使い方はこんな感じです。 string str = "aaaabbbbcccc"; if(str.StartsWith("aaa")) // str が "aaa" から始まるかどうかチェックする { // 一致する …

【C#】文字列を分割するSplitメソッドをより使いやすいよう改善する

C# である文字列を特定の文字で複数の文字列に分割する Split メソッドの利用性を向上するための拡張メソッドの紹介です。 はじめに Split メソッドっは大変便利ですがセパレーターに複数の文字を指定する場合や、文字列をセパレーターとして使う場合以下の…

【C#】プロパティにつけた属性を取得する方法

C#でプロパティにつけた属性を取得する方法の紹介です。自作のクラスなどでプロパティに付与したカスタム属性を取得してその値を利用する方法です。 確認環境 C# 8.0 .NET Core 3.1 VisualStudio 2019 Windows10 コンソールプログラムで動作を確認 実装コー…

【C#】文字列の先頭だけを大文字 or 小文字に変換する

ある文字列の中の1文字だけを大文字・小文字に切り替える方法の紹介です。 C#の標準ライブラリにはこういった操作が存在しないので自分で実装することになります。今回は string クラスの拡張メソッドとして実装します。処理効率は特別な外部ライブラリを使…

Yの位置が下にある画像は手前に表示する(Z座標制御編)

前回、2Dゲームの画像表示時に Transparency Sort Mode を Custom Axis にすることで Y が下にあるオブジェクトほど手前に表示する + 補助コンポーネントを作成する記事を書きましたが、今回は Y 位置が下にある画像ほど手前に表示する処理を Z 位置を使って…

Transparency Sort ModeがCustom Axisの時に前後が入れ替わる位置を表示する

初めに 2Dのゲームで画面を立体的に見せるためにY軸が下にあるものほど手前にオブジェクト描画するという技法があります。 これ「Isometric Sorting」と呼ぶのかわからないですが(自分の中ではY軸ソートと呼んでいました)が、Unityでは Transparency Sort …

C#のバージョンと.NET Framework, .NET Coreの対応表

備忘録的な意味で書き残しておきます。 (1) C#言語バージョンと各ランタイムの関係性 (2) .NET Standardとランラムの関係性 備考 参考資料 (1) C#言語バージョンと各ランタイムの関係性 .NET Framwework と .NET Core がどのC#の言語バージョンにあたるのか…

【C#】2つの変数の中身を入れ替える方法4選

2つの変数の中身を入れ替える方法を4種類紹介したいと思います。 (1) 昔ながらの方法 (2) Tupleを使う (3) 外部のメソッドで入れ替える (4) 拡張メソッドで入れ替える(値型のみ)方法 ほかにあるかな? (1) 昔ながらの方法 教科書に書いてあるやつ。最も一般…

【C#】Span<T>構造体を使ったバイナリファイルの読み書き

.NET Core 時代になって Span 構造体が追加されて、FileStream クラスとか BitConverter が標準で対応し始めたのでバイナリデータの効率的な入出力が簡単になってるようなので実験。 条件 バイナリデータで float 型を5件書き込んだファイルを用意する その…

.NET Coreでクリップボードを利用した単一実行可能ファイルを作成する

.NET Core でプログラムを(Windows上で)実行するとGUIDが100件ぶんクリップボードに設定された状態にするコンソールアプリを作成したいと思います。その際に単一実行可能ファイル形式でバイナリを出力する方法と合わせて紹介したいと思います。 今回の記事の…

.NET CoreのコンソールアプリでWindows Formsの機能を利用する

.NET Core で作成済みのコンソールアプリなプロジェクトでWindows Formsの機能を利用可能にするための設定方法の紹介です。以下の画像のように、プロジェクトテンプレートをからコンソールアプリを選択して作成したプロジェクトは Windows Formsにあった機能…

【C#】文字列を大文字・小文字を区別しないで比較する

C#

C#で文字列どうしを大文字と小文字の区別しないで比較する方法の紹介とちょっとした便利ネタの紹介です。 大文字と小文字を区別しないで比較する方法 拡張メソッドを定義する 大文字と小文字を区別しないで比較する方法 標準ライブラリの範囲内で大文字と小…