c#4.0-他们是如何在Massive Micro ORM中实现这种语法的,多个args参数



在这个页面上,Scott Hanselman展示了Micro ORMs Dapper和Massive的两个例子,Massive的例子引起了我的兴趣,因为我不知道他们如何实现这种语法。

示例如下,我将把它分成几行,而不是一行:

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);

但我得到的只是:

命名参数规范必须在指定所有固定参数之后出现

显然这是错误的。此外,我在来源中看不到任何允许这样做的东西,但也许我找错了地方。

我在这里错过了什么?

事实上,我认为Hanselman先生展示了一些无法编译的代码(哎呀,我真的敢这么说吗?)I只能让它像这样工作:

 Test(age: 40, name: "Lasse", args: new object[] { 10, 25 });

这只是C#4.0中的命名参数。您可以使用上面调用中的参数名称来指定参数。

要接受一个数组(正如您看到的多个"args"),只需使用"params"关键字:

public void MyMethod(字符串arg1,params object[]args){//。。}

现在,要在C#4.0中调用此方法,可以使用"MyMethod(arg1:"Lasse",args:1,2,4,5)"

最新更新