Movatterモバイル変換


[0]ホーム

URL:


Logo

目次

概要

C# も .NET Framework (のライブラリ)も、ずいぶんと進歩してきました。その結果、一部の構文やライブラリは、別のもので置き換えられる/置き換えた方がいいものも出てきています。

過去の遺物

いくつかの構文は、もう完全に過去のものです(互換性のためだけに残されています)。

非ジェネリック コレクション

ポイント: 非ジェネリック版のコレクションは使ってはいけない。

C# 2.0 で 「ジェネリック」 が導入されると同時に、ジェネリック版のコレクションが導入されました。それ以前の、非ジェネリック版のコレクションを使うメリットは一切ないので、使わないようにしましょう。

非ジェネリック版からジェネリック版で、名称が変わっているものもあるので気を付けましょう。「ジェネリック版に、ArrayList 相当のものがない」という誤解もあったりしますが、List<T> がこれに相当します。

対比表を表1に示します。非ジェネリック版はSystem.Collections 名前空間、ジェネリック版はSystem.Collections.Generics 名前空間で定義されています。

コレクションの非ジェネリック版とジェネリック版の対比
非ジェネリック版ジェネリック版概要
ArrayListList<T>要素を配列で持っておいて、配列の長さが足りなくなったら配列を作りなおすリスト※1
なしLinkedList<T>双方向連結リスト。
StackStack<T>後入れ先出し(LIFO: Last In First Out)コレクション。
QueueQueue<T>先入れ先出し(FIFO: First In First Out)コレクション。
HashtableDictionary<TKey, TValue>ハッシュテーブル方式で要素を管理する辞書※2
なしSortedDictionary<TKey, TValue>二分探索木方式で要素を管理する辞書。
SortedListSortedList<TKey, TValue>整列済み配列で要素を管理する辞書。
なしHashSet<T>(.NET 4 以降) ハッシュテーブル方式で要素を管理するセット※3
なしSortedSet<T>(.NET 4 以降) 二分探索木方式で要素を管理するセット。
  • ※1リスト: 要素の順序を保つコレクション。

  • ※2辞書: キーで値を検索可能なコレクション

  • ※3セット: 要素を含むか含まないかだけを管理するコレクション

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;

匿名メソッド式でできることは、全てラムダ式でもできます。逆に、ラムダ式の方が高機能で、匿名メソッド式ではできないこともできます。しかも、ラムダ式の方が記法が簡素で使いやすいので、今となっては、匿名メソッド式を使うメリットは全くありません。(参考: 「匿名関数」 )

実際、もしもラムダ式の方を先に導入していたら、匿名メソッド式という構文は不要でした。匿名メソッド式は、過去との互換性のためだけに残されています。

更新履歴

更新:言語バージョンの指定

[C#]

ファイル ベース実行

[C#]

C# 14.0 の新機能

[C#]

更新:[雑記] オーバーロード解決

[C#]

型の分割定義 (partial)

[C#]

ブログ

C# 14 の破壊的変更点(First-class Span)

ファイナライザー

文字列リテラルを data セクションに UTF-8 で書き込む案

nameof(T<>)

First-class な Span 型


誤字等を見つけた場合や、ご意見・ご要望がございましたら、GitHub の Issues まで気兼ねなくご連絡ください。

[8]ページ先頭

©2009-2025 Movatter.jp