C#4.0可选参数 - 如何指定"Guid"类型的可选参数?

RPM*_*984 12 .net c# guid optional-parameters c#-4.0

这是我的方法:

public void SomeQuery(string email = "", Guid userId = Guid.Empty)
{
   // do some query
}
Run Code Online (Sandbox Code Playgroud)

userId给我一个错误,因为它必须是一个编译时常量,我明白.但即使我宣布一个const:

private const emptyGuid = Guid.Empty;
Run Code Online (Sandbox Code Playgroud)

然后将方法签名更改为:

public void SomeQuery(string email = "", Guid userId = emptyGuid)
{
   // do some query
}
Run Code Online (Sandbox Code Playgroud)

仍然没有爱.

我错过了什么?

Qui*_*son 20

您是否尝试将其设置为Guidala 的新实例:

public void SomeQuery(string email = "", Guid userId = new Guid())
{
   // do some query
}
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.

  • 这种方法的好处是你仍然可以在你的代码中使用Guid.Empty来测试它.例如if(userId == Guid.Empty){...} (3认同)
  • 您应尽可能避免使用可选参数.它们是代码味道.此外,他们通过更难以封装来鼓励糟糕的API,并鼓励通过相同的方法实现不同的行为. (2认同)