在此页面上,Scott Hanselman显示了Micro-ORM 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);
但我得到的只是:
显然这是错误的。此外,我无法在消息来源中看到任何允许这样做但也许我在错误的地方寻找。在指定了所有固定参数后,必须出现命名参数规范
我在这里缺少什么?
答案 0 :(得分:8)
实际上我认为Hanselman先生展示了一些无法编译的代码(哎呀,我真的敢说这个吗?)。 我只能让它像这样工作:
Test(age: 40, name: "Lasse", args: new object[] { 10, 25 });
答案 1 :(得分: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)”