参数值交换
本文关键字:交换 参数 | 更新日期: 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派生版本中的名称。这是命名论点的不幸结果在比赛很晚的时候被添加。