C#
ハッシュを利用することにより、文字列から一意の数字を生成することができます using System.Security.Cryptography; using System.Text; public static class Utility { public static int StringToInt(string input) { using (var sha256 = SHA256.Create…
C#8.0 から Index型とRange型が追加されたようで、以下にあるように範囲指定や、最後からn番目の指定ができるようになりました var array = new []{ 1, 2, 3, 4, 5}; array[1..^1]; // 1番目から最後の1つ手前 (2, 3, 4) array[1..]; // 1番目から最後 (2…
FlagsAttribute を利用すると Enum をビットフラグとして利用することができる 値は1,2,4... と定義するのは面倒なので、1を何ビットシフトしたかで値を管理する [System.Flags] public enum Flag { A = 1 << 0, B = 1 << 1, C = 1 << 2, // 全フラグ ALL = …
変数を比較する際に == や Equals を利用しますが、正しく内部処理を理解してなかったので各型による挙動を調査しました int の比較 int intValue1 = 10; int intValue2 = 10; Console.WriteLine($"{intValue1 == intValue2}"); // true Console.WriteLine($…
Texture2D の原点を調べたかったので、以下のコードで0に近いほうが黒くなるテクスチャを出力してみる var texture2D = new Texture2D(256, 256, TextureFormat.RGBA32, false); for (var x = 0; x < 256; x++) { for (var y = 0; y < 256; y++) { var v = (…
去年は連日投稿していたのですが、今年はできなかったので アドベントカレンダーだけでも完走したいと思い作成しました 内容は全部濃いものは無理だと思いますが、25記事書けるように頑張ります 日にち 内容 1 GameObject をアクティブにして Animation が呼…
リンクより、ひらがな・カタカナは「あ」から始まり「ゖ」で終わることが分かる これを参考に、ひらがなをカタカナに変換したり、カタカナをひらがなに変換するクラスを作成すると以下になる using System.Text; public static class StringUtility { privat…
複数パラメータを監視して、制御したい際に public 変数にしていると管理が大変なので Func を登録して戻り値で判定できるようにしてみました クラス using System; using System.Collections.Generic; /// <summary> /// Function を登録して、それが全部満たすか、</summary>…
private object CreateListInstance<T>(T[] values) { var elementType = typeof(T); var listType = typeof(List<>).MakeGenericType(elementType); var list = (IList) Activator.CreateInstance(listType); for (var i = 0; i < values.Length; i++) list.Ad</t>…
private object CreateArrayInstance<T>(T[] values) { var elementType = typeof(T); var array = (Array) Activator.CreateInstance(elementType, values.Length); for (var i = 0; i < values.Length; i++) array.SetValue(values[i], i); return array; }</t>
GenericInt が Generic<T> を継承しているか確認するために、BaseType を見てみたところ Generic1[System.Int32]` と表示され意図したクラスが取得できなかった public abstract class Generic<T>{} public class GenericInt : Generic<int>{} private void Main() { va</int></t></t>…
public static class Utility { /// <summary> /// 0~maxの範囲のIndex を返す /// 負の値にも対応 /// </summary> public static int LoopIndex(int index, int max) { var ret = index % max; if (index < 0) ret += max; return ret; } } 実行例 Utility.LoopIndex(10, 20); …
https://hacchi-man.hatenablog.com/entry/2021/02/23/220000hacchi-man.hatenablog.com 以前の記事でアルファ画像が対応できなかったのですが、少し調査したらまだ問題ありますが アルファを適当できたので、メモがてら追加しておきます オブジェクトのシェ…
モックを作ってる際にわざわざ値を管理するクラスを複数作るのが面倒だったので、 enum を指定 して手軽に利用できるクラスを作成しました 使い方 enum を定義してこれを Key に利用する public enum ValueType { Score, Life, } 値の初期化 Value<ValueType>.Set(Value</valuetype>…
コレクション初期化子を使用してディクショナリを初期化する方法は以下に挙げられる2つがあります // Addメソッドを用いての初期化 var students = new Dictionary<int, Test>() { { 1, new Test(10) }, { 2, new Test(20) }, { 3, new Test(30) }, }; // インデクサを</int,>…
public static class IntExtension { private static int _Mask = 0x1; /// <summary> /// 奇数かどうか /// </summary> /// <returns></returns> public static bool IsOdd(this int self) { return (self & _Mask) == _Mask; } /// <summary> /// 偶数かどうか /// </summary> /// <returns></returns> public static bool IsEven(thi…
クラスをコピーする場合、自前でコピーするメソッドを作成する必要があります フィールドの追加などがあるとそのたびにコピー処理を直すのも面倒なので Reflection を利用して DeepCopy する拡張メソッドを作成しました サンプル 使い方は簡単でクラスのイン…
enum を key にした Dictionary は便利ですが、enum が内部的にはクラスな都合上不都合が生じます そのため dictionary[(int)Hoge.A] のようにわざわざ key を int にして、enum から int にキャストしてアクセスして利用しなければいけません そのため、Dic…
enum を利用している際に、日本語名を表示したいことがある 普通に処理を記述すると、swtich を使って処理を書くが Attribute を利用して日本語名を追加することもできる コード まずは、enum のフィールドに使う Attribute を定義、必要なのは別名なので st…
GetHashCode の値は HashSet で利用しており検索の高速化に使っていると記述してあったので GetHashCode の値をすべて同一にした場合と異なるようにした場合で、速度を見てみる コードは 自作クラスを HashSet に突っ込んでランダムで検索してみる var loop …
Microsoftの公式サイトを見てみると、 既定のハッシュ関数として機能します。 との記述があります。これだけでは、GetHashCodeメソッドの利用用途がよく分からないかもしれませんが、具体的にはインスタンスの比較に利用されるのではないかと推測されます。…
enum を int にキャストするときには (int)enum と enum.GetHashCode() の2つがある(はず) しかしながらどちらが早いのか、int をそのまま扱うのと比べてどれくらい遅いのかを調べたことがなかったので調べてみる Unity Editor 上 で .NET 4.x にして Prof…
コンストラクタ内から他のコンストラクタを呼び出すには this を使えば呼び出せます public class Sample { public int Value; // int を引数とするコンストラクタを呼び出す public Sample() : this(10) { } public Sample(int value) { Value = value; // …
public static T[,] Copy<T>(this T[,] self) { var dst = new T[self.GetLength(0), self.GetLength(1)]; for (var a = 0; a < self.GetLength(0); a++) for (var b = 0; b < self.GetLength(1); b++) dst[a, b] = self[a, b]; return dst; } public static T[</t>…
使い方 EventMonitor がジェネリッククラスになっているので Event を継承したクラスを利用する object でもいいが、使う場所によってわざわざキャストするのが面倒だったのでこのような形になった private void Main() { // イベント追加 EventMonitor<TestEvent>.Add(</testevent>…
以下の図のように中心から指定した距離のマス座標一覧を取得するスクリプト 例えば、2の場合は (0, 2), (0, -2), (1, 1), (-1, 1), (1, -1), (-1, -1), (2, 0), (-2, 0)になる public static class TileMapUtil { public static List<Vector2Int> GetPositions(int dista</vector2int>…
コード using System; using System.IO; public class ScriptUtil { /// <summary> /// スクリプトをロードする /// ※スクリプト以外でもテキストファイルであればロードできる /// </summary> /// <param name="path">パス (Assets/からでよい)</param> /// <param name="lineAction">1行見込み毎に呼び出される</param> /// <param name="encode">エンコード指定 </param>…
// ABCD => aBCD public static string ToTopLower(string value) { if (value.Length <= 0) return string.Empty; return char.ToLower(value[0]) + value.Substring(1); }
例えば string と int を結合する際には iValue は ToString する必要が無い var sValue = ""; var iValue = 10; string text = sValue + iValue; おそらく private void operator+ (string a, object b) みたいな実装になってると思って Reference Source …
メモがてらまとめる 子クラスかどうか 親のクラス インナークラスの取得 継承クラスを全検索 インスタンス生成 すべての Type の中から検索 メソッド実行 static なメソッドを実行 プロパティ取得 static なプロパティ取得 ジェネリックメソッドの実行 メソ…