5

私が理解しているように、params「ボンネットの下」で指定したタイプの配列を単純に与える構文糖衣です。

まず、いつこれを使いますか?

第二に、なぜ配列引数を宣言する代わりにそれを使用するのでしょうか?

4

5 に答える 5

8

Math.Minちょうど 2 つの引数を取ります。これはばかげた制限です。他の多くの言語では、次のように記述できます。

double x, y, z, w;
double least = min(x, y, z, w);

minそのように使用できる関数を書きたい場合は、 params.

于 2011-04-28T17:38:30.847 に答える
5

明らかな例は、 のようなメソッドにありString.Format()ます。params を使用したこのステートメントは簡単に理解できます。

string.Format("Your name is {0}, {1}", lastName, firstName);

しかし、params がないと、少し難しくなります。

string.Format("Your name is {0}, {1}", new string[] { lastName, firstName });

私は、これらのような文字列関数に params をたくさん使用していることに気づきました。コードの可読性を向上させるためだけに使用します。

于 2011-04-28T17:41:43.287 に答える
3

私がそれを使用した 1 つの方法は、SQL クエリをラッパー クラスに渡すことです。可変数のパラメータを含むいくつかのSQLを用意します。このようにして、最初に配列を作成するのではなく、クエリで送信するすべてのパラメーターをリストすることができます。

    SQLWrapper.Query(" some sql with parameters", new SqlParameter("@param1", val1),
                                                  new SqlParameter("@param1", val1),
                                                  new SqlParameter("@param1", val1));

代替手段よりもはるかに優れています:

SQLWr

apper.Query(" some sql with parameters", new SqlParameter[]{new SqlParameter("@param1", val1),
                                                      new SqlParameter("@param1", val1),
                                                      new SqlParameter("@param1", val1)});

可変数の引数が必要な状況に遭遇した場合に便利です。

于 2011-04-28T17:41:14.320 に答える
2

Base Class ライブラリの例はString.Split(params char[] separator)で、次のように記述できます。

var segs = myString.Split(',',';',' ');

それよりも

var sets = myString.Split(new char[] {',', ';', ' '});
于 2011-04-28T17:43:04.810 に答える
1

私が params を使用していることに気付いた主な理由は、ストアド プロシージャを実行することです。

データベースに数百のストアド プロシージャがある場合を考えてみましょう。その場合、実際には2つの選択肢しかありません

1: 数か月かかるストアド プロシージャごとに個別にコードを記述する

2: 任意のストアド プロシージャを実行し、任意の数とタイプのパラメータを取る汎用エグゼキュータ メソッドを作成します。

databaseHelper.ExecuteStoredProcedure(
                "myStoredProecdure",
                DbProviderHelper.StringParameter("@parameter_string", somestring),
                DbProviderHelper.BoolParameter("@parameter_string", somebool),
                DbProviderHelper.IntParameter("@parameter_int", someint));   
于 2011-04-28T17:53:23.533 に答える