我在C#中遇到了一些我以前从未见过的东西(至少我不认识它)......现在让我觉得很愚蠢。
我下载了Dapper,顺便说一句,这是很棒的,并且正在使用存储过程进行第一次查询。
connection.Query<MyObject>("[dbo].[sp_MyStoredProc]", new
{
Name = keywords
}, commandType: CommandType.StoredProcedure);
intellisense方法签名说这应该是IDbTransaction
。这是某种类型的速记转换:
commandType: CommandType.StoredProcedure
加入IDbTransaction
?
谢谢!
答案 0 :(得分:5)
这称为命名参数。请参阅MSDN文章Named and Optional Arguments (C# Programming Guide):
命名参数使您无需记住或查找 被调用方法的参数列表中的参数顺序。该 每个参数的参数可以通过参数名称指定。
Dapper的查询方法有许多带默认值的参数(timeout,commandType等)。使用此语法,您只能指定其中一些而不指定其他语法。
答案 1 :(得分:3)
这是Named parameter,查询方法有一个commandType
参数,正在指定。
如果您定义类似的方法:
public static void SomeMethod(string arg1, int arg2)
{
}
您可以按名称指定参数,例如
SomeMethod(arg1: "Some string", arg2: 3);
您也可以不按顺序指定它们:
SomeMethod(arg2: 3, arg1: "Some string");
通过名称指定参数的一个好处是,当它们的位置不明显时,例如在Regex.Match
:
var match = Regex.Match(@"^\d+$", "1234"); //wrong
var match = Regex.Match(pattern: @"^\d+$", input: "1234");