コガネブログ

平日更新を目標にUnityやC#、Visual Studioなどのゲーム開発アレコレを書いていきます

【C#】String.Splitをもっと使いやすくする拡張メソッド

はじめに

例えばCRLF(\r\n)の改行で区切られた文字列をString.Split関数で分割する場合

var src = "ピカチュウ\r\nカイリュー\r\nヤドラン";

// 1. エラー
src.Split("\r\n");

// 2. OK
src.Split(new []{ "\r\n" }, StringSplitOptions.None);

1のように文字列を引数で受け取るSplit関数がオーバーロードされていないので
2のように区切り文字を配列に変換して、さらにStringSplitOptionsを指定する必要があり
構文が冗長になってしまいます

対応方法

using System;

/// <summary>
/// string 型の拡張メソッドを管理するクラス
/// </summary>
public static partial class StringExtensions
{
    /// <summary>
    /// 指定された文字列で区切られた部分文字列を格納する文字列配列を返します
    /// </summary>
    public static string[] Split(this string self, string separator)
    {
        return self.Split(new []{ separator }, StringSplitOptions.None);
    }

    /// <summary>
    /// 指定された文字列で区切られた部分文字列を格納する文字列配列を返します
    /// </summary>
    public static string[] Split(this string self, string separator, StringSplitOptions options)
    {
        return self.Split(new []{ separator }, options);
    }

    /// <summary>
    /// <para>指定された文字列の配列の要素で区切られた</para>
    /// <para>部分文字列を格納する文字列配列を返します</para>
    /// </summary>
    public static string[] Split(this string self, params string[] separator)
    {
        return self.Split(separator, StringSplitOptions.None);
    }
}

このような拡張メソッドを用意しておくと

var src = "ピカチュウ\r\nカイリュー\r\nヤドラン";

// OK
src.Split("\r\n");

短くわかりやすく記述できます