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(~
うん、キモい。