6

このページでは、Scott Hanselmanが Micro-ORM の Dapper と Massive の 2 つの例を示しており、Massive の例に興味を持ちました。

例は次のとおりです。ここでは、1 つの長い行ではなく、複数の行に分割します。

var tbl = new Products();
var products = tbl.All(where: "CategoryID = @0 AND UnitPrice > @1",
    orderBy: "ProductName", limit: 20, args: 5,20);
                                       ^----+---^
                                            |
                                            +-- this

この構文をどのように実装して、args複数の値を持つことができるようにしましたか? それがそれを可能にする唯一のものであるため、私はparams- ベースの引数を想定していますが、名前付き引数について不平を言って修正したように見えるので、それを可能にするメソッドをどのように構築したかわかりません位置引数の順序が間違っています。

私はこのようなテスト方法を試しました:

public static void Test(string name, int age, params object[] args)
{
}

次に、名前付き引数を使用します。

Test(age: 40, name: "Lasse", args: 10, 25);

しかし、私が得るのはこれだけです:

名前付き引数の指定は、すべての固定引数を指定した後に指定する必要があります

明らかにそれは間違っています。また、ソースにはこれを許可するものは何もありませんが、間違った場所を探している可能性があります。

ここで何が欠けていますか?

4

2 に答える 2

8

実際、Hanselman 氏はコンパイルできないコードをいくつか示したと思います (おっと、あえてそう言いましたか?)。次のようにしか機能しません。

 Test(age: 40, name: "Lasse", args: new object[] { 10, 25 });
于 2011-05-27T12:06:22.587 に答える
2

これは、C# 4.0 では単なる名前付き引数です。上記の呼び出しで見たように、パラメーターの名前を使用して引数を指定できます。

配列を受け入れるには (複数の「args」でわかるように)、単に「params」キーワードを使用します。

public void MyMethod(string arg1, params object[] args){ //.. }

C# 4.0 でこのメソッドを呼び出すには、"MyMethod(arg1: "Lasse", args:1,2,4,5)" を使用できます。

于 2011-06-30T21:23:54.210 に答える