2013-06-22 77 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

重載決策從衍生版本使用。 這是一個不幸的後果,因爲命名參數 在遊戲中添加得非常晚。