2013-06-22 40 views
1

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

在我的控制器,从我的库返回数据与

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)

他们奇迹般地切换 - 游戏ID现在是2,用户ID为1

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

+2

愚蠢的问题,但:你确定你没有改变其他地方的价值? –

+0

如何? GetUserTeam方法在那个时刻被切换 - 在遇到另一行代码之前。 – jag

+0

询问您的代码是否有效。尝试传入硬编码的值,使用或不使用命名参数来查看它是否是同一个问题。 –

回答

1

有一些混淆命名参数当参数的名称没有在接口(或基类的虚拟方法),因为它们是在执行(覆盖)方法是相同的。考虑这个

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

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

知名权威埃里克利珀Stack Overflow上写道elsewhere

重载决策从衍生版本使用。 这是一个不幸的后果,因为命名参数 在游戏中添加得非常晚。