C Sharpその他 - 使用してはいけない機能
概要
C#も.NET Frameworkも日々更新されている。
いくつかの構文やライブラリは、完全に過去のものとなっている。(互換性のためだけに残されている)
そのため、一部の構文やライブラリは、別のもので置き換えた方がよい。
使用すべきでないもの
非ジェネリック コレクション
ポイント : 非ジェネリック版のコレクションは使用すべきでない。
C# 2.0でジェネリックが導入されると同時に、ジェネリック版のコレクションが導入された。
そのため、非ジェネリック版のコレクションを使うメリットは一切無いので、使わないようにする。
また、非ジェネリック版からジェネリック版では、名称が変わっているものもあるので気を付けること。
※ジェネリック版にArrayListに相当するものがないという誤解もあるが、List<T>がこれに相当する。
対比表を下表に示す。
非ジェネリック版はSystem.Collections名前空間、ジェネリック版はSystem.Collections.Generics名前空間で定義されている。
コレクションの非ジェネリック版とジェネリック版の対比
非ジェネリック版 | ジェネリック版 | 概要 |
---|---|---|
ArrayList | List<T> | 要素を配列で持っておいて、配列の長さが足りなくなったら配列を作りなおすリスト。 要素の順序を保つコレクション。 |
なし | LinkedList<T> | 双方向連結リスト。 |
Stack | Stack<T> | 後入れ先出し(LIFO: Last In First Out)コレクション。 |
Queue | Queue<T> | 先入れ先出し(FIFO: First In First Out)コレクション。 |
Hashtable | Dictionary<TKey, TValue> | ハッシュテーブル方式で要素を管理する辞書 キーで値を検索可能なコレクション。 |
なし | SortedDictionary<TKey, TValue> | 二分探索木方式で要素を管理する辞書。 |
SortedList | SortedList<TKey, TValue> | 整列済み配列で要素を管理する辞書。 |
セル内のテキスト | HashSet<T> | (.NET 4以降) ハッシュテーブル方式で要素を管理するセット。 要素を含むか含まないかだけを管理するコレクション。 |
セル内のテキスト | SortedSet<T> | (.NET 4以降) 二分探索木方式で要素を管理するセット。 |
現在、System.Collections名前空間にあるもので使用できるものは、BitArrayクラス程度である。
実際、Silverlight等の後発のフレームワークでは、BitArray以外の非ジェネリック版のコレクションは削除されている。
匿名関数
ポイント : 匿名メソッド式にメリットはない。
C#では、匿名関数を作るための構文として、2種類のものが存在する。
匿名メソッド式でできることは、全てラムダ式でもできる。
ラムダ式の方が高機能であり、匿名メソッド式ではできないこともできる。
また、ラムダ式の方が記法が簡素で使いやすいので、匿名メソッド式を使うメリットは全く無い。
・匿名メソッド式(C# 2.0以降)
Func<int, int> f1 = delegate(int x) { return x * x; };
・ラムダ式(C# 3.0以降)
Func<int, int> f2 = x => x * x;