いちいち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の連鎖は見にくいのでとりあえず自分用として使ってみます。