在这个页面上,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)"