参数值交换

本文关键字:交换 参数 | 更新日期: 2023-09-27 18:19:34

我的参数中的值正在相互交换,我看不出任何原因。

在我的控制器中,我使用从存储库返回数据

UserTeam ut = _UserTeamRepository.GetUserTeam(userteamid:0, gameid: gameid, userid: UserID);

当我到达上面一行的控制器中的断点时,
gameid=1
userid=2

这是正确的。然而,当(再次调试)时,我到达了GetUserTeam存储库方法中的断点:

public UserTeam GetUserTeam(int userteamid = 0, int gameid = 0, int userid = 0)

他们神奇地切换了——gameid现在是2,userid是1。

这是个虫子吗?发生了什么事?

参数值交换

当参数的名称在接口(或基类的虚拟方法)中与在实现(重写)方法中不同时,命名参数会出现一些混淆。考虑这个

interface IFace
{
  void M(int user, int game);
}
class C : IFace
{
  public void M(int game, int user) // note order here
  {
  {
}

然后使用命名参数语法调用M会导致混乱,特别是因为intellisense弄错了。

著名权威Eric Lippert在Stack Overflow的其他地方写道:

重载解析使用more派生版本中的名称。这是命名论点的不幸结果在比赛很晚的时候被添加。