.NET Core

【C#】Anyメソッド解説 & 範囲指定できるように拡張する

LinqのAnyメソッド使い方と範囲指定できるように機能拡張を行います。 Anyメソッドとは 簡単な説明 Anyメソッドの使い方 Anyメソッドは使用頻度(低) Anyに範囲を指定するように拡張する EnumerableExtensionクラス 使い方 【参考】Anyメソッドの実装 Anyメ…

【C#】配列に要素を追加・削除する、中身をシャッフルする

C#の配列に要素を追加したり削除したり中身をランダム化する方法の紹介です。 配列は一度宣言してしまうとサイズ変更は(基本的に)できないです。そういった事がした場合は動的リストの「System.Collections.Generic」名前空間にある「List」を使用しますが…

Unityと.NET環境で乱数生成を共通化する

タイトルの通り、Unity環境下での乱数生成と非Unityの乱数生成を共通化しようという話です。 何故このようなことをするかというと、非UnityのMonoBehaviorも何もない環境で作成したアルゴリズムをUnityへインポートしたりするときに、UnityのRandomクラスと…

【C#】Unityと.NET標準ライブラリの命名規則の違い

.NET標準は「System名前空間内にあるクラス類」を指します。一方のUnityは「UnityEngine名前空間内にあるクラス類」以下にあるオブジェクト群を指します。それぞれ同じC#言語ですが各々の間で大きく命名規則が異なっています。という訳でちょっとまとめてみ…

C#で1次元配列と2次元配列を相互に変換する

タイトルの通り、1次元配列と2次元配列の相互変換を行う処理の紹介です。 考え方 このような2次元配列を このような配列に変換することができます。 実装コード 早速実装例を紹介したいと思います。 ArrayUtilityクラス 配列に対する操作のため以前紹介したA…

C#でHexタイルの位置を計算する

今回は6角形のタイルの座標の計算を行うライブラリの紹介をしたいと思います。 計算した位置をいい感じに描画すると以下のような感じに並べることができます。 HexLayoutクラス:6角形のタイルを並べる 結構強引に位置を計算していますが、指定した位置を中…

【C#】の1次元配列と多次元配列、リストのアクセス速度の違い

前回の記事で紹介した2次元配列の管理クラスですが中身のデータを「1次元配列を2次元配列扱いする」か「C#固有機能の多次元配列」で行ったときの実行速度に触れましたが今回は実際に速度の違いを計測してみました。 takachan.hatenablog.com タイトルの通り…

【C#】グリッドマップを管理するクラスを作成する

2D のゲーム実装でマップを扱うときは x と y の2次元のマップデータを使うことがありますがこのデータ構造の実装方法を紹介します。 x と y の 2次元のデータですが、中身は 1次元の配列として扱います。なので 1列の配列データを 2次元のグリッドとして扱…

【C#】2次元配列から2次元配列を切り出す

タイトルの通りなのですが、絵にするとこんな感じです。 以下のような2次元配列があった時に 以下のようにある部分を範囲選択して切り取り新しい2次元配列を作成する処理になります。 実装コード ArrayUtilityクラス 使い方 ArrayExtension:拡張メソッド版 …

C#でオブジェクト初期化子を使った時の丸カッコの有無

C#には「オブジェクト初期化子」というインスタンス作成時に使用できる初期化方法があります。 例えば以下のようなクラスがあった場合、公開されているプロパティに対して初期化と同時に値が設定できます。 // クラス宣言 public class Point2Di { public in…

C#の配列をインデックス付きforeachする

前置き C#の配列をインデックス付きでforeachする方法は純粋なC#では2種類あります。シンプルにforで回すか、LinqでSelectするかです(ループの外にインデックスを宣言すればどの方法でも処理できますが、ここではインデックス用の変数(i)が外に見えない形式…

.NET Core3.xとUnityでAES暗号化を利用する

タイトルの環境でAES暗号化をしてみたので実装方法の紹介をしたいと思います。 AESの実装方法はサンプルがネットに結構転がっているので簡単に説明するだけでいきます。 いちおう、以前 Cocos2d-x 上で AES 暗号化ライブラリを実装しましたのですが、C++に比…

C#の標準機能でデータを圧縮・展開する

C#には結構昔から標準機能として「DeflateStream」と「GZipStream」というデータを圧縮する2種類のライブラリが実装されています。 MSDNに説明が書いてあるのですが読んでもよくわからないと思うので簡単にまとめてみました。 名前 説明 Deflate 可逆圧縮ア…

C#で属性を利用して処理に制約の説明を追加する

属性とは C#に属性(Attribute)という機能があり、これを付ける事でクラスやメンバーに情報を追加することができます。 .NET で使用されている有名なものでは、デバッグ時だけコンパイルされる"Conditionat"属性や、廃止予定を予告するための"Obsolete"属性が…

C#で文字列にSQLのIN句のようなメソッドを追加する

SQLにあるIN句をC#の文字列に適用し、リストに格納された文字列がある文字列に一致するかどうかを判定する処理をstringに追加したいと思います。 例えば"ABC123"という文字列の中に"AB", "12"という文字が含まれているかという処理は以下のように書けば判定…

C#の共有メモリで簡単にオブジェクトを共有する方法

C#を使ってプロセス間でデータ共有をする際にオブジェクトを共有する方法です。 プロセス間でオブジェクトを共有したい場合、大抵の場合構造体を定義してメモリに書き込めばすれば良いとネットに書いてあります。ですが、普段クラスで扱っているデータをその…

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

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

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

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

C#でTypeInitializationExceptionが発生する

ある日突然プログラムを実行したら「TypeInitializationException」が発生した場合の対処法です。 自分のコード内で発生している場合、以降で説明する状況で発生している可能性があります。 // 発生する例外のメッセージ // .NET Core System.TypeInitializa…

キーボードを適当に打ってスーパープログラマになれるアプリを作ってみた

タイトルの通りです。 動かすとこんな感じになります。 youtu.be サムネサイズだと小さすぎて何やってるかわからないので大きくしてみてください(見ないか…orz コードはGitHubに上げてみました。適当なのでクソコードです。 github.com 作成環境 以下で動作…

C#とC++で任意の型をスターリンソートする

ネットで少しだけ話題になったネタ系ソートアルゴリズムのスターリンソート(というかフィルター?)をC#とC++で実装してみようと思います。 スターリンソートとは? C#の実装 オリジナルの実装 少し改造してみる C++で実装 オリジナルの実装 少し改造してみ…

C#のファイル操作で発生する例外のメモ

自分向けのメモ。耄碌したのか同じことを何回も調べてたのでまとめ。 ファイル操作 存在する or 存在しないファイルに対してメソッドを実行したときの挙動 メソッド名 結果 メッセージ File.Copy sourceFileName : FileNotFoundException ファイル '${0}' が…

.NET CoreでTextFieldParserを使用したCSVの読み取り

.NET Coreに"TextFieldParser"ないじゃん!作ろう!(当然Unityにも無いです。 、、、とはいっても.NET Core3.0で移植されるみたいなのでそれまでのつなぎって感じですかね、、、? つまり、C#でCSVの読み取りを検索するとよく出てくる「TextFieldParser」(…

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

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

C#で乱数を作成する & 毎回異なるシードを指定する方法

C#(Unity以外/.NET FM, .NET Core)で乱数を生成するには、System.Randum クラスを使用します。 Randomクラスの基本的な使い方 短時間でRandomクラスを複数インスタンス化すると乱数が同値になる 回避案(1) Randomクラスのインスタンスを全体で使いまわす …

C#でStopwatchを使った時間計測を1行でできるようにする

ある特定の区間の実行時間を測定したい事があると思います。 その場合、一般的にはStopwatch(System.Diagnostics名前空間内)を使って以下コードを記述していると思います。 // 典型的な時間計測のコード public static void Main(string[] args) { // 千回…

【C#】Consoleの出力先を変更する

Consoleの出力先をファイルにしたりカスタムクラス用いて任意の出力先を設定する方法です。 確認環境 Consoleの出力先の変更方法 Consoleの出力先をファイルに変更する 変更した後に出力先を元に戻す カスタム出力先を指定する Consoleとトレースに同時に出…

C#でGUIDをToStringするときに使用できる書式

C#でGUID(128bit長の一意の識別子)を生成するには、標準ライブラリ内のGuidクラス(System名前空間内)を使用します。 using System; public static void Main(string[] args) { Guid id = Guid.NewGuid(); Console.WriteLine(id.ToString()); // c1b2e279…

C#でEnumに付与した属性と属性の値を取得する

2020-09-01 タイトルの通り、C#で自分で作成したEnum型に属性を付与し、その属性を取得およびその属性の値の取得をしたいと思います。 属性をオブジェクトとして取得して内容を取り出す流れになります。 対象の型の準備 値を取得する拡張メソッドの作成 拡張…

C#でListの内の要素をforeach中に削除する

結論から言うと、foreachの中でリストの要素を削除するのは無理です。諦めましょう。*1 代替手段 (1) for文を逆順で回す (2) RemoveAllメソッドで削除 (3) Whereで抜粋する (4) 自作する foreachの右辺でToArray() + Removeはやめましょう 削除しようとする…