C#

【C#】 Lazy<T> ( 遅延初期化 ) クラス

.NET4.0に追加された Lazy ( 遅延初期化 ) クラスをUnityで使いたいので書いた。 gist.github.com 追記 2016/12/02 string 型だと、パラメータ受け取らないコンストラクタがないため、 where T : new() を削除し、 上記修正とともに () => new T(); も () =>…

【雑記】C#と仲良くなった気がする

C++erの同僚とC#について語り合うとき、 結構の割合で「C++のように パラメータに constをつけたいね!」という話題になる。なぜ、C#のパラメータに const つけないのかを自分なりに考えてみた。要するにこんな感じだ gist.github.comもちろん、C++ でも プ…

【C#】列挙型の項目数取得(その2)

C#

1年前に同じようなこと書きましたが 【C#】列挙型の項目数取得 - 浮遊島今回はジェネリッククラスでstatic変数を持つバージョンの実装です メリット:1回目だけ計算して、2回目以降のアクセスが早くなります using System; public class EnumSize<T> where T </t>…

【C#】Enumの爆速ForEach

C#

Enumをforeachで回すと遅いよと聞いて 自前で書いてみたら爆速ForEachができた // 以下のenum定義を使用する enum Days {Sat=10, Sun=20, Mon, Tue, Wed, Thu, Fri}; まず結果(1,000,000回を回す) // 1回目 foreach : 1328ms EnumExtension.ForEach : 1283ms…

【C#】C#でboost::bindを実装してみた(3)

前回の続きです 引数の部分束縛を実装に以下問題がありました ①どの引数を束縛するのかはどうやって指定するの? ②たとえ引数を適当を渡しても、両方も当てはまるのでエラーが発生します これらを対策してみました ①束縛する引数を指定する Placeholder 引数…

【C#】C#でboost::bindを実装してみた(2)

前回にはすべての引数を束縛することができました 部分的に束縛をやりたいと思います イメージ // メソッドを定義する public static void DelegateMethod(int a,int b) { // do do something } // デリゲートを保存する(第2引数を束縛する) Action action …

【C#】C#でboost::bindを実装してみた(1)

boost::bindはなかなか便利で、 C#のデリゲートで実装してみました デリゲート C#では delegate という メソッドをカプセル化する機能がありました 実際自分から定義する必要なく、 Action と Func を使用することが多いです Action と Func の簡単な例 // i…

【C#】BitArray覚えた

BitArrayとはビット値の小型の配列を管理するクラス 基本の使い方 例えば4ビットを管理するクラスを生成する // BitArray生成 BitArray bits = new BitArray(4); // [false,false,false,false]で初期化 // ビット2をtrueに設定 bits.Set(2,true); // ビット…

【C#】列挙型の項目数取得

例えば、こんな感じな列挙型を定義する enum Direct { Up, Down, Left, Right } 項目数取得 // enum => string[] => 文字列数取得 Enum.GetNames(typeof(Direct)).Length; テンプレートで実装する public static class EnumExtension { public static int Le…

【C#】ジェネリック引数付きコンストラクタ

C#では テンプレート型のコンストラクタに引数が渡せません using System; public class Foo<T> where T : new() { public Foo() { new T(1); } } `T': cannot provide arguments when creating an instance of a variable type 詳細:Compiler Error CS0417 Ty</t>…

【Unity】構造体属性

C#では union がなかったが、似ている機能があります StructLayout属性 構造体のレイアウトを指定可能にします FieldOffset属性 変数を指定位置に配置します [FieldOffset(バイト)] 例 ARGBを保持するクラスを作成します using System.Runtime.InteropServic…

【C#】Action と Funcメモ

C#

ActionとFuncの違いは戻り値あるかどうかですAction:戻り値なし Func:戻り値あり両方とも パラメーター 16 個まで用意されます

【C#】演算子のオーバーロードメモ

C#

public static 戻り値型 operator 演算子 (パラメータリスト) サンプル class Foo { public int X {get;set;} public Foo(int x){ X = x; } public static Foo operator + (Foo lhs,Foo rhs) { return new Foo(lhs.X+rhs.X); } }

【C#】 Enum メソッド

C#

C#にはEnumを配列に変換するメソッドが用意されています例えば、以下の enum を定義されます enum Type { X = 10, Y = 20, Z = 30, } Enum -> string[] string[] names = Enum.GetNames(typeof(Type)); Enum -> Array int[] values = (int[])Enum.GetValues(…

【C#】名前付き引数を覚えた

void func(int width,int height) { // do something } void bar() { func(height:10,width:20); } 1.引数の順番を気にしなくかける 2.呼び出すコードを見ただけで引数の意味が分かる void bar() { func(/*width*/20,/*height*/10); } C++では名前付き引数を…

【Unity】Delegates 勉強した

C# delegate の使い方をメモします デリゲート class Foo { delegate void MyDelegate(int num); // delegateの要求形式を記述 MyDelegate myDelegate; public Foo() { myDelegate = PrintNum; myDelegate(10); myDelegate = PrintDoubleNum; myDelegate(10)…