我的参数中的值互相交换,我看不出任何理由。
在我的控制器中,我使用
从我的存储库返回数据 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。
这是一个错误吗?发生了什么事?
答案 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 派生版本中的名称。 这是命名论证这一事实的不幸结果 在游戏中很晚才加入。