3

F#では、[1..100]と言うだけで、一連の数値を生成できます。

C#でも同様のことをしたいです。これは私がこれまでに思いついたものです:

public static int[] To(this int start, int end)
{
    var result = new List<int>();
    for(int i = start; i <= end; i++)
        result.Add(i);
    return result.ToArray();
}

これにより、1.To(100)と言ってセットを作成できるようになりました。

残念ながら、これは[1..100]ほど読みやすくありません。誰かがC#でこれを行うためのより良い方法を思いついたことがありますか?小文字の方が読みやすいですか?たとえば、1.to(100)?または、「To」は悪い言葉ですか?1.Through(100)のようなものはもっと読みやすいですか?

いくつかの考えを探しています。他の誰かがもっとエレガントな解決策を思いついたことがありますか?

編集: 応答を読んだ後、次の範囲を使用してToメソッドを書き直しました。

public static int[] To(this int start, int end)
{
    return Enumerable.Range(start, end - start + 1).ToArray();
}

1.To(100)の読みやすさについての考えをまだ探しています

4

5 に答える 5

8

Enumerable.Range(1、100);

于 2008-12-16T13:07:06.993 に答える
5

を使用するというアイデアが気に入っていToます。代替案Enumerable.Rangeには微妙な欠陥があります。2 番目のパラメーターは、最後の要素の値ではなく、列挙の長さです。これは私が過去にやったことです:

public IEnumerable<int> To(this int start, int stop)
{
  while (start <= stop)
    yield return start++;
}

編集:結果を として取得する場合はint[]、次を追加するだけ.ToArray()です:

int[] theSet = 1.To(100).ToArray();
于 2008-12-16T13:17:39.577 に答える
0

Set(1,100)拡張メソッドを使用するよりも、のようなものかIntSequence(1,100)、読みやすいと思います。

個人的な意見ですが...

于 2008-12-16T13:09:10.780 に答える
0

あなたが望む特定の構文を言語が正確に表現していないことを心配しすぎていると思います。

私の見方では、拡張メソッドはちょっとした砂糖ですが、拡張メソッドの「驚き」を正当化するために本当にそれを使用しているのだろうかと思います。

C# 言語のドメイン内では、何をしようとしているのかをメソッド名で詳しく説明する方が適切です。これは、C# というよりも Ruby のように感じます。これは、特にスキップ パターン (つまり、1 から 10 までの数字を 3 つずつ) で範囲を追加したい場合は、それ自体でクラスに参加したいように感じます。と思います

public class RangedArray {
    public static int[] Generate(int from, into to, int by=1) { /* ... */ }
}

これを C# で表現することはまったく問題ありません。

于 2008-12-16T17:12:02.833 に答える