参数值交换

时间:2013-06-22 12:29:35

标签: c# entity-framework asp.net-mvc-4

我的参数中的值互相交换,我看不出任何理由。

在我的控制器中,我使用

从我的存储库返回数据

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

当我到达上面一行控制器的断点时,
游戏ID = 1
用户ID = 2

这是对的。但是,当(再次调试)时,我到达GetUserTeam存储库方法内的断点:

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

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

这是一个错误吗?发生了什么事?

1 个答案:

答案 0 :(得分: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上写elsewhere

  

重载解析使用 more 派生版本中的名称。   这是命名论证这一事实的不幸结果   在游戏中很晚才加入。