LoginSignup
6
6

More than 5 years have passed since last update.

C#で(1...10)みたいに書きたかった

Posted at

C# (1...10)という記法が欲しいを読んだので。

はじめに

あまり実用性とかありません。

1. 拡張メソッド

intにこんな拡張メソッドを定義すれば、

public static IEnumerable<int> To(this int from, int to)
{
    return Enumerable.Range(from, to - from + 1);
}

こう書けます。

1.To(2).Select(~

2. 明示的型変換と演算子オーバーロード

参考
(int)(2項演算子)(int)みたいな記法でシーケンスを生成したいが、
C#は全く新しい2項演算子は作れないし、
今ある2項演算子(+とか-とか)をオーバーロードで潰すと困る。

というわけで(int)(2項演算子)(変換演算子)(int)とします。
今回は被験体となる2項演算子に+を使い、
変換演算子にRangeを作ることにします。

public struct Range
{
    int _right;
    public static implicit operator Range(int right)
    {
        return new Range() { _right = right };
    }

    public static IEnumerable<int> operator +(int left, Range right)
    {
        return Enumerable.Range(left, right._right -left + 1);
    }
}

こう書けます。

(0+(Range)10).Select(~

うん、キモい。

6
6
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6