这个在C#中有冒号的参数叫什么?

时间:2014-02-06 20:30:18

标签: c# syntax

我在C#中遇到了一些我以前从未见过的东西(至少我不认识它)......现在让我觉得很愚蠢。

我下载了Dapper,顺便说一句,这是很棒的,并且正在使用存储过程进行第一次查询。

connection.Query<MyObject>("[dbo].[sp_MyStoredProc]", new
{
    Name = keywords
}, commandType: CommandType.StoredProcedure);

intellisense方法签名说这应该是IDbTransaction。这是某种类型的速记转换:

commandType: CommandType.StoredProcedure

加入IDbTransaction

问题

  1. 这叫做什么语法?
  2. 这里发生了什么事?
  3. 谢谢!

2 个答案:

答案 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");