アジョブジ星通信

進捗が出た頃に更新されるブログ。

いちいちConcatとか書くの面倒だったから+,-でいじれるの作った

今日Visual Studio Professionalをついに買ってしまったわけ(証拠)で、今日中にインストール終わるか不安だったけどなんとか終わったのでちょっとコード書いてました。

public class OperatableEnumerable<T> : IEnumerable<T>
{
    public OperatableEnumerable(IEnumerable<T> source)
    {
        this.source = source;
    }

    private IEnumerable<T> source;

    public IEnumerator<T> GetEnumerator()
    {
        return source.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }

    public static OperatableEnumerable<T> operator +(OperatableEnumerable<T> x, IEnumerable<T> y)
    {
        return x.Concat(y).AsOperatable();
    }

    public static OperatableEnumerable<T> operator +(IEnumerable<T> x, OperatableEnumerable<T> y)
    {
        return x.Concat(y).AsOperatable();
    }

    public static OperatableEnumerable<T> operator -(OperatableEnumerable<T> x, IEnumerable<T> y)
    {
        return x.Except(y).AsOperatable();
    }

    public static OperatableEnumerable<T> operator -(IEnumerable<T> x, OperatableEnumerable<T> y)
    {
        return x.Except(y).AsOperatable();
    }
}

public static class OperatableEnumerableExtensions
{
    public static OperatableEnumerable<T> AsOperatable<T>(this IEnumerable<T> source)
    {
        return new OperatableEnumerable<T>(source);
    }
}

これを使うと x.Concat(y)x.AsOperatable() + y みたいに書けます!実に気持ち悪い。ただConcatの連鎖は見にくいのでとりあえず自分用として使ってみます。