String.TrimStartは、引数がcharです。Stringが引数のオーバーロードを書いてみました。
StringExtensions.cs
using System; namespace Extensions { public static class StringExtensions { /// <summary> /// 文字列の先頭から、指定された文字列を削除します。 /// </summary> /// <param name="self">System.Stringのインスタンス。</param> /// <param name="trimString">削除する文字列。</param> /// <returns> /// 現在の文字列の先頭から、<paramref name="trimStrig"/>パラメーターの文字をすべて削除した後に残った文字列。 /// <paramref name="trimStrig"/>がnullまたは空の場合は、代わりに空白文字が削除されます。 /// </returns> public static string TrimStart(this string self, string trimString) { if (self == null) throw new NullReferenceException(string.Format("Null文字列に対して{0}を呼び出すことはできません。", nameof(TrimStart))); if (string.IsNullOrEmpty(trimString)) return self.TrimStart(' ').TrimStart(' '); if (string.IsNullOrEmpty(self)) return self; if (self.StartsWith(trimString)) return self.Substring(trimString.Length, self.Length - trimString.Length); return self; } } }
ユニットテスト
using Extensions; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; namespace ExtensionsTest { [TestClass] public class TrimStartTest { [TestMethod] public void 先頭の文字列が一致() { string source = "ababe"; string trimString = "ab"; string expected = "abe"; string actual = source.TrimStart(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void 先頭の文字列が不一致() { string source = "ababe"; string trimString = "bc"; string expected = "ababe"; string actual = source.TrimStart(trimString); Assert.AreEqual(expected, actual); } [TestMethod] [ExpectedException(typeof(NullReferenceException))] public void 文字列がnull() { string source = null; string trimString = "bc"; string actual = source.TrimStart(trimString); } [TestMethod] public void 文字列が空() { string source = ""; string trimString = "bc"; string expected = ""; string actual = source.TrimStart(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void 文字列が半角スペースで不一致() { string source = " "; string trimString = "bc"; string expected = " "; string actual = source.TrimStart(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void 文字列が全角スペースで不一致() { string source = " "; string trimString = "bc"; string expected = " "; string actual = source.TrimStart(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void 文字列が半角スペースで一致() { string source = " abcde"; string trimString = " "; string expected = "abcde"; string actual = source.TrimStart(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void 文字列が全角スペースで一致() { string source = " abcde"; string trimString = " "; string expected = "abcde"; string actual = source.TrimStart(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void trimStringがnullの場合は半角スペースが削除される() { string source = " abcde"; string trimString = null; string expected = "abcde"; string actual = source.TrimStart(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void trimStringが空の場合は半角スペースが削除される() { string source = " abcde"; string trimString = ""; string expected = "abcde"; string actual = source.TrimStart(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void trimStringがnullの場合は全角スペースが削除される() { string source = " abcde"; string trimString = null; string expected = "abcde"; string actual = source.TrimStart(trimString); Assert.AreEqual(expected, actual); } } }
テスト結果