Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

【.NET】文字列の右端から指定された文字数の文字列を取得する拡張メソッド

文字列の右端から指定された文字数の文字列を取得する拡張メソッドです。

StringExtensions.cs

using System;

namespace Extensions {
    static class StringExtensions {
        /// <summary>
        /// 文字列の右端から指定された文字数の文字列を取得します。
        /// </summary>
        /// <param name="self">System.Stringのインスタンス。</param>
        /// <param name="length">取り出す文字列の文字数。</param>
        /// <returns>取り出した文字列。</returns>
        public static string Right(this string self, int length) {
            if (length < 0)
                throw new ArgumentException("桁数には負数を指定できません。", nameof(length));

            if (string.IsNullOrEmpty(self))
                return self;

            if (self.Length <= length) {
                return self;
            }

            return self.Substring(self.Length - length, length);
        }
    }
}

Program.cs

using System;

namespace Extensions {
    class Program {
        static void Main(string[] args) {
            string hoge1 = "abc";
            Console.WriteLine(hoge1.Right(0));  // 出力なし
            Console.WriteLine(hoge1.Right(1));  // c
            Console.WriteLine(hoge1.Right(2));  // bc
            Console.WriteLine(hoge1.Right(3));  // abc
            Console.WriteLine(hoge1.Right(4));  // abc

            try {
                Console.WriteLine(hoge1.Right(-1));
            } catch (Exception ex) {
                Console.WriteLine(ex.Message);  // 桁数には負数を指定できません。パラメーター名:length
            }

            string hoge2 = "";
            Console.WriteLine(hoge2.Right(0));  // 出力なし
            Console.WriteLine(hoge2.Right(1));  // 出力なし

            string hoge3 = null;
            Console.WriteLine(hoge3.Right(0));  // 出力なし
            Console.WriteLine(hoge3.Right(1));  // 出力なし

            Console.ReadKey();
        }
    }
}