もこたんブログ@mocuLab(・ω・)

Programming & Designing

C#の拡張メソッドの使い方(初心者向け)

例えばLinqを使ってみようと思ったけど、インテリセンス(入力補助)に出てこなくて「なぜか使えない!?」と悩んでいる方などに。

Linqに限らず拡張メソッドの使い方は
・usingディレクティブを追加して名前空間を指定する
・プロジェクトの「参照設定」にそのアセンブリへの参照を追加する
を行えば使えるようになります。

Listクラスの例

例としてリストクラスを挙げてみます。
https://msdn.microsoft.com/ja-jp/library/6sh2ey19(v=vs.110).aspx f:id:mocotanus:20171004230606j:plain

Listクラスの拡張メソッドを見てみます。
f:id:mocotanus:20171004231332j:plain

Linq関連のメソッドは拡張メソッドがずらっと並んでいますね。例えばここにある拡張メソッドのAnyメソッドを使いたいとします。

Anyメソッドへのリンクをクリックして、詳細を見てみます。
f:id:mocotanus:20171004231551j:plain

名前空間: System.Linq
これは、ソースファイルの先頭に「using System.Linq;」が必要なことを意味します。
Linq系なら最近のVisualStudioのテンプレートですでに追加されてるんですけどね。VisualStudioのバージョンが古いと「using System.Linq;」を自動挿入してくれなくて、手動で追加する必要があったりします。

アセンブリ: System.Core (System.Core.dll 内)
そのプロジェクトの参照設定に「System.Core」への参照が追加されていることが必要なことを意味します。
f:id:mocotanus:20171004231926j:plain

適当なコンソールアプリの例

using System;
using System.Collections.Generic;
using System.Linq;// これが必要
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<string>()
            {
                "あ",
                "い",
                "う",
            };

            bool res = list.Any(x => x == "え");// 使えてます
            Console.WriteLine(res.ToString());// False

            // コンソールアプリで試しているとき、
            // こういうので止めておかないと超速で処理が終了して画面が閉じる
            Console.ReadLine();
        }
    }
}

これで、拡張メソッドのAnyが使えるようになりました。

コンソールアプリで試しているとき、Console.ReadLineメソッドなどで止めておくと確認しやすいです(エンターキーを叩くと画面を閉じる)。止めたいところにブレークポイントを貼っておくでも同じですが…