2015年9月13日日曜日

C#の拡張メソッド

C#には拡張メソッドという仕組みがあるらしいので、使ってみる。

using System;
using System.Text;

namespace MyExSample
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] Array = Console.ReadLine().Split(' ').ArrayToInts();
            Console.WriteLine(Array.ArrayToString());
        }
    }

    static public class MyExtensions
    {
        public static string ArrayToString(this int[] Array)
        {
            if (Array.Length == 0)
            { return (""); }

            StringBuilder sb = new StringBuilder();

            sb.Append(Array[0]);

            for (int i = 1; i < Array.Length; i++)
            { sb.Append(" "); sb.Append(Array[i]); }

            return (sb.ToString());
        }

        public static int[] ArrayToInts(this string[] Texts)
        {
            int N = Texts.Length;
            int[] A = new int[N];
            for (int i = 0; i < N; i++)
            { A[i] = int.Parse(Texts[i]); }
            return (A);
        }
    }
}
/*------*/
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace MyExSample.Tests
{
    [TestClass()]
    public class MyExtensionsTests
    {
        [TestMethod()]
        public void ArrayToIntsTest()
        {
            int[] Array;

            Array = new string[] { }.ArrayToInts();
            Assert.AreEqual(0, Array.Length);

            Array = new string[] { "1", "2", "3" }.ArrayToInts();
            Assert.AreEqual(3, Array.Length);
            Assert.AreEqual(1, Array[0]);
            Assert.AreEqual(2, Array[1]);
            Assert.AreEqual(3, Array[2]);
        }

        [TestMethod()]
        public void ArrayToStringTest()
        {
            Assert.AreEqual("", new int[] { }.ArrayToString());
            Assert.AreEqual("1 2 3", new int[] { 1, 2, 3 }.ArrayToString());
        }
    }
}

文字列の配列を整数の配列に変換するやつと、整数の配列を文字列に変換するやつ。エラー処理とかは一切していないので実際に使う場合はてきとーにごにょごにょと。

ところで、MsTestで配列をテストするのにいい方法は無いものか。forで回してエラーメッセージにIndexを入れておくとかかなぁ… それこそ拡張メソッドで実現するべきっぽいですよね。まぁMsTestが使いづらかろうともデフォルトで使える以上は使い続けますが。

0 件のコメント:

コメントを投稿