0

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

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

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。

这是一个错误吗?到底是怎么回事?

4

1 回答 1

1

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

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

然后M使用命名参数语法调用会导致混乱,特别是因为智能感知出错了。

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

重载解析使用来自派生版本的名称。这是在游戏后期添加命名参数这一事实的不幸结果。

于 2013-06-22T13:09:49.843 回答